假如我们数据是这样的:
mshing#24-mshing@msezi.com|A zhynin#18|zhynin@msezi.com-B mm-12-mm@123-c
分割符号为#
,-
,|
不同的符号而且每一行的格式还不一致。但是数据的格式都是一样的,我们想通过分隔符提取数据。
使用多次awk的方法行不通,但别忘了强大的awk是可以一次指定多次分隔符的。
上代码:
mshing@remtor:~$ cat text.txt | awk -F '[#|-]' '{print $1, $2, $3, $4}' mshing 24 mshing@msezi.com A zhynin 18 zhynin@msezi.com B mm 12 mm@123 c
直接就可以得到格式化的数据了
如果是需要指定分割符输出呢
简单
上代码:
mshing@remtor:~$ cat text.txt | awk -F '[#|-]' -v OFS='|' '{print $1, $2, $3, $4}' mshing|24|mshing@msezi.com|A zhynin|18|zhynin@msezi.com|B mm|12|mm@123|c
如果在最前面增加内容或者序号呢
可以,依旧可以一行awk搞定,而不用额外使用sed
添加固定内容:
mshing@remtor:~$ cat text.txt | awk -F '[#|-]' -v OFS='|' '{print "data", $1, $2, $3, $4}' data|mshing|24|mshing@msezi.com|A data|zhynin|18|zhynin@msezi.com|B data|mm|12|mm@123|c
添加有序序号:
mshing@remtor:~$ cat text.txt | awk -F '[#|-]' -v OFS='|' '{print NR,$1,$2,$3,$4}' 1|mshing|24|mshing@msezi.com|A 2|zhynin|18|zhynin@msezi.com|B 3|mm|12|mm@123|c
变量名 含义
ARGC 命令行变元个数
ARGV 命令行变元数组
FILENAME 当前输入文件名
FNR 当前文件中的记录号
FS 输入域分隔符,默认为一个空格
RS 输入记录分隔符
NF 当前记录里域个数
NR 到目前为止记录数
OFS 输出域分隔符
ORS 输出记录分隔符
ok 就这样,有问题就继续问。