awk 代码将给定列乘以空格分隔文件中的数字

awk 代码将给定列乘以空格分隔文件中的数字

我有空格分隔的文件。我想对给定的列进行一些数学运算。例如,我想将第 2 列乘以 1e6。我可以使用以下命令:

awk 'BEGIN { FS=","; OFS=","; } {print $1,$2=$2*1e6,$3,$4}' result.txt

我的问题是我的文件可能包含任意数量的列。在这种情况下,我的awk命令应该是什么?假设我的文件有 25 列,我想将第 15 列乘以 100。我该如何在 中执行此操作awk

答案1

您可以使用 打印整行,而不是打印所有字段$0

这可行,因为我们可以改变通过向字段分配数据

例如

$2=$2*100

将更新第二个字段并保持其余字段不变:

% echo '1 2 3 4' | awk '{$2=$2*100; print $0}'
1 200 3 4

我们可以通过使用默认值来缩小这个范围;例如print单独打印$0

awk '{$2=$2*100; print}'

我们甚至可以使用默认操作:

awk '{$2=$2*100} 1'

但总的来说,我推荐较长的版本,因为它更容易让其他人阅读和理解;代码的可维护性与简洁性同样重要:

awk '{$2=$2*100; print $0}'

答案2

您不需要知道列数,您只需更新您需要的列,然后awk重新组装它们:

awk '{ $15 *= 100 } 1' file.csv

NF但如果需要的话你也可以使用,像这样:

awk '{ $15 *= 100; for(i=1; i<=NF; i++) printf(" %d", $i); print "\n" }' file.csv

相关内容