我正在尝试在多个文本文件的列之间添加格式化列。使用
awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]" "$2}7' file file
我可以转换具有表单
的文件1 2 3 4
10 20 30 40
100 200 300 400
到
1 1800 3 4
10 9900 30 40
100 90900 300 400
如何对多个.dat文件执行上述操作?
答案 0 :(得分:1)
tmp="/usr/tmp/tmp$$"
for file in *
do
awk '...' "$file" "$file" > "$tmp" && mv "$tmp" "$file"
done
但是,你的剧本:
awk 'NR==FNR{c[NR]=$3;l=NR;next}{$2=($3+c[1])*c[l]" "$2}7' file file
永远不要使用字母l
(el)作为变量名称,因为它看起来太像1
(一)。我实际上把它写成:
awk 'NR==FNR{c[++n]=$3;next}{$2=($3+c[1])*c[n]" "$2}7' file file
或者如果内存是大文件的问题:
awk 'NR==FNR{c[NR==1]=$3;next}{$2=($3+c[1])*c[0]" "$2}7' file file