我有空格分隔的文件。我想对给定的列进行一些数学运算。例如,我想将第 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