在保持文件结构的同时将列 x-end 相乘

DNA*_*ash 3 osx awk text-processing files

我有一个输入 File1,它看起来像这样:

A,22,1,2,3,4,5
G,26,5,6,7
X,28,10,20,10
Run Code Online (Sandbox Code Playgroud)

我想在保持文件结构的同时对列 3-end 应用一个方程。例如,如果我想要使用的方程乘以 2,我正在寻找输出:

A,22,2,4,6,8,10
G,26,10,12,14
X,28,20,40,20
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下命令执行此操作:

awk -F ',' '{for(i=1; i<=NF; i++) if (i >= 3)
     print 2*$i
  else
    print $i }' File1
Run Code Online (Sandbox Code Playgroud)

这提供了正确的输出,但摆脱了所有文件结构。如果使用我想要使用的实际方程是:2*(2*($i-1)+1)

非常感谢伴随解决方案的任何解释,因为我对此仍然很陌生!

Tho*_*hor 7

您只需要设置输出字段分隔符 ( OFS),例如:

awk '{ for (i=3; i<=NF; i++) $i*=2 } 1' FS=, OFS=, infile
Run Code Online (Sandbox Code Playgroud)

或使用您的公式:

awk '{ for (i=3; i<=NF; i++) $i = 2*(2*($i-1)+1) } 1' FS=, OFS=, infile
Run Code Online (Sandbox Code Playgroud)

输出:

awk '{ for (i=3; i<=NF; i++) $i*=2 } 1' FS=, OFS=, infile
Run Code Online (Sandbox Code Playgroud)

1在脚本的末尾是一个短手{ print $0 }

  • @DNA_bash 提示:`$i *= 2` 只是`$i = $i * 2` 的简写。 (2认同)