1

我在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,但我遇到了一些问题。

4

3 回答 3

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

如果它不能解决您的问题,我很确定它会帮助您指导获得一个。

于 2013-07-17T00:10:00.207 回答
1

使用

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

和一些较短的版本:

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

甚至更短:

sed 's/ .*|\(.*\)|[^,]*/,\1/' input
于 2013-07-17T00:41:18.237 回答
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
于 2013-07-17T02:19:33.220 回答