代码之家  ›  专栏  ›  技术社区  ›  Ramin Zahedi

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

  •  -1
  • Ramin Zahedi  · 技术社区  · 8 年前

    我有一个制表符分隔的文本文件。有些行有10列,有些行有11列。我想在10个列行的最后一行添加一个额外的列,其值为0。我如何做到这一点?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Inian    8 年前

    既然您提到了append,您可以 awk 如下

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

    这个 -F $'\t' 照顾翼片分离部分, BEGIN {OFS = FS} 用于设置输出场分离。

    这个 NF==10 仅查找只有10条记录的行,并且 {$0=$0"0"}1 用于在添加额外字的情况下重建该行。

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

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

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

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

    或者,如果你有最新的 GNU Awk (自 4.1.0 已发布),它具有“就地”文件编辑选项:

    gawk -i inplace -F $'\t' 'BEGIN {OFS = FS} NF==10{$0=$0"0"}1' input-file
    
        2
  •  0
  •   potong    8 年前

    这可能适用于您(GNU sed):

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

    这会将第十一列替换为其自身,否则会添加一个选项卡,然后 0 .