awk打印一行的一些参数

时间:2013-07-16 23:52:16

标签: linux bash shell sh

我在linux中的文件中有行,我正在尝试打印没有|且没有参数的行

$cat file 
2013-07-15,Provider 1.99,3|30000055|2347|0,12222,1,3,0,0,0,19,aaa,bbb
2013-07-15,Provider 1.99,3|30000055|2347|0,12222,44,12,0,0,0,33,aaa,bbb

我需要输出如下:

2013-07-15,Provider,2347,12222,1,3,0,0,0,19,aaa,bbb
2013-07-15,Provider,2347,12222,44,12,0,0,0,33,aaa,bbb

我正在尝试使用awk,但我遇到了一些问题。

3 个答案:

答案 0 :(得分:1)

如果您的线条具有类似的图案,那么您可以保留:

awk 'BEGIN{FS=OFS=","}{$2="Provider";$3=2347}1' file

如果您不知道模式是什么,那么这里是一个更通用的模式:

awk 'BEGIN{FS=OFS=","}{split($2,a,/ /);split($3,b,/\|/);$2=a[1];$3=b[3]}1' file

如果它无法解决您的问题,我很确定它可以帮助您指导获得问题。

答案 1 :(得分:1)

使用

sed 's/ [^|]*|[^|]*|\([^|]*\)|[^,]/,\1/' input

和一些较短的版本:

sed 's/ .*|\([^|]*\)|[^,]*/,\1/' input

甚至更短:

sed 's/ .*|\(.*\)|[^,]*/,\1/' input

答案 2 :(得分:1)

使用awk,让空格或逗号或管道为字段分隔符:

awk -F '[[:blank:],|]' -v OFS=, '{
    print $1,$2,$6,$8,$9,$10,$11,$12,$13,$14,$15,$16
}' file
2013-07-15,Provider,2347,12222,1,3,0,0,0,19,aaa,bbb
2013-07-15,Provider,2347,12222,44,12,0,0,0,33,aaa,bbb