当文件的列数为2时如何添加列

当文件的列数为2时如何添加列

我正在尝试为我拥有的文件写入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

相关内容