awk使用多分隔符进行数据切分

假如我们数据是这样的:

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 就这样,有问题就继续问。

相关文章

发表回复

您的电子邮箱地址不会被公开。