我正在尝试为我拥有的文件写入awk
内容。数据集的示例是
S,CV0110,1235
S,1234
D,CQ120,3245
P,7894
期望结果如下(当一行字段数为2时添加空字段)
S,CV0110,1235
S,,1234
D,CQ120,3245
P,,7894
我尝试了这个,但它为所有数据行添加值,而不是那些有 2 个字段的数据行。
printf 'S,CV010,1235\r\n' | awk 'BEGIN{FS=OFS="fs"}{$n = $n OFS value}1'
答案1
给定
$ cat file
S,CV0110,1235
S,1234
D,CQ120,3245
P,7894
然后
$ awk -F, 'BEGIN{OFS=FS} NF<3{$1 = $1 OFS} 1' file
S,CV0110,1235
S,,1234
D,CQ120,3245
P,,7894
答案2
sed '/,.*,/!s/,/,,/' file
/,.*,/!
如果行不包含两个逗号,s/,/,,/
将第一个逗号替换为两个逗号。
这可以推广到更多领域。例如,如果某行缺少第七个字段,则添加一个空字段,
sed -E '/,(.*,){5}/!s/,/,,/' file
答案3
假设每列的值始终相似。
如果行开头的单个字母后跟 4 个数字并且行结束,请添加逗号:
sed '/^[A-Z],[0-9]\{4\}$/s/,/,,/' file
输出:
S,CV0110,1235
S,,1234
D,CQ120,3245
P,,7894