如何附加到制表符分隔文本文件中列数较少的行?

How to append to the lines with fewer columns in a tab separated text file?

我有一个制表符分隔的文本文件。有些行有 10 列,有些行有 11 列。我想在 10 列行的最后一行添加一个额外的列,值为 0。我该怎么做?

既然你提到了追加,你可以awk如下

awk -F $'\t' 'BEGIN {OFS = FS} NF==10{[=10=]=[=10=]"0"}1' input-file

-F $'\t' 负责制表符分隔部分,BEGIN {OFS = FS} 用于设置输出字段分隔。

NF==10 仅查找只有 10 条记录的行,{[=18=]=[=18=]"0"}1 用于重建添加了额外单词的行。

要写入单独的文件,请使用 > 重定向运算符 as

awk -F $'\t' 'BEGIN {OFS = FS} NF==10{[=11=]=[=11=]"0"}1' input-file > output-file

要替换原始文件,请使用 mv

awk -F $'\t' 'BEGIN {OFS = FS} NF==10{[=12=]=[=12=]"0"}1' input-file > output-file ; mv output-file input-file

或者如果你有最新的 GNU Awk(自 4.1.0 发布),它有 "inplace" 文件编辑的选项:

gawk -i inplace -F $'\t' 'BEGIN {OFS = FS} NF==10{[=13=]=[=13=]"0"}1' input-file

这可能适合您 (GNU sed):

sed -r 's/[^\t]+/&/11;t;s/$/\t0/' file

这会将第 11 列替换为自身,否则会添加一个制表符,然后 0