【发布时间】:2017-05-09 21:03:29
【问题描述】:
我有一个制表符分隔的文本文件。有些行有 10 列,有些行有 11 列。我想在值为 0 的 10 列行的最后一列中添加一个额外的列。我该怎么做?
【问题讨论】:
标签: bash text awk sed text-processing
我有一个制表符分隔的文本文件。有些行有 10 列,有些行有 11 列。我想在值为 0 的 10 列行的最后一列中添加一个额外的列。我该怎么做?
【问题讨论】:
标签: bash text awk sed text-processing
既然你提到了追加,你可以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
【讨论】:
这可能对你有用(GNU sed):
sed -r 's/[^\t]+/&/11;t;s/$/\t0/' file
这会用它自己替换第十一列,否则它会添加一个选项卡,然后添加0。
【讨论】: