如何替换文件中的多列?

How to replace multiple columns in a file?

假设我有一个文件,我想用 AAAA 替换第 1、3 和 5 列,该文件由 |(竖线)分隔。

到目前为止,我正在使用 for 循环来执行此操作,但我认为这消耗了大量 space,因为我在将每列替换后的结果复制到一个临时文件(输入文件的文件名很大)

ARRAY=(1,3, 5)

for i in ${ARRAY[@]}
      do

    sed "s/[^|]*/AAAA/$i"  filename  >> /tmp/tempfile

    cp /tmp/tempfile filename
    rm /tmp/tmpfile

     done

请提出更聪明的方法

你为什么不为此使用 awk?直截了当:

awk -v repl="AAAA" 'BEGIN{FS=OFS="|"} {===repl}1' file > new_file

测试

$ cat a
1|2|3|4|5|6|7|8
1|2|3|4|5|6|7|8
1|2|3|4|5|6|7|8
1|2|3|4|5|6|7|8
1|2|3|4|5|6|7|8
$ awk -v repl="AAAA" 'BEGIN{FS=OFS="|"} {===repl}1' a
AAAA|2|AAAA|4|AAAA|6|7|8
AAAA|2|AAAA|4|AAAA|6|7|8
AAAA|2|AAAA|4|AAAA|6|7|8
AAAA|2|AAAA|4|AAAA|6|7|8
AAAA|2|AAAA|4|AAAA|6|7|8

通用到多个列(在 Col 中设置)和模式替换(在 Pat 中插入)

awk -v 'Col=1,3,5' -v 'Pat=AAAA' 'BEGIN{OFS=FS="|"} {for(i=1;i<=NF;i++) if( ","Col"," ~ ","i",")$i=Pat;print}' YourFile > NewFile