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