在unix [使用awk或sed]的文件中的任何位置添加一列

时间:2012-07-24 08:53:44

标签: shell unix sed awk

我正在为以下命令寻找其他替代方案/更智能的1个衬管,它应该为请求的列号添加一个值。 我尝试按照以下sed命令正常工作,将值4添加到第4列。 [需要:因为我有这样的文件,其中包含1000条记录&很多时候我需要在任何位置添加一列。] 我的approch仅适用于较小的规模。

cat 1.txt

1|2|3|5
1|2|3|5
1|2|3|5
1|2|3|5

sed -i 's/1|2|3|/1|2|3|4|/g' 1.txt

cat 1.txt

1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
1|2|3|4|5
事先坦克斯。

4 个答案:

答案 0 :(得分:11)

答案 1 :(得分:7)

使用awk的一种方法。将两个参数传递给脚本,列号和要插入的值。脚本增加字段数(NF)并遍历最后一个字段,直到指示的位置并在那里插入新值。

运行此命令:

awk -v column=4 -v value="four" '
    BEGIN {
        FS = OFS = "|";
    }
    {
        for ( i = NF + 1; i > column; i-- ) {
            $i = $(i-1);
        }
        $i = value;
        print $0;
    }
' 1.txt

使用以下输出:

1|2|3|four|5
1|2|3|four|5
1|2|3|four|5
1|2|3|four|5

答案 2 :(得分:2)

使用coreutils和流程替换的一种方式:

f=1.txt
paste -d'|'                       \
  <(cut -d'|' -f1-3 $f          ) \
  <(yes  4 | head -n`wc -l < $f`) \
  <(cut -d'|' -f4- $f           )

答案 3 :(得分:1)

一种方法,使用coreutils和进程替换:

sed 's/3|/3|4|/' 1.txt