使用bash为多个文本文件添加一列

时间:2013-07-25 07:12:05

标签: for-loop awk

我正在尝试在多个文本文件的列之间添加格式化列。使用

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文件执行上述操作?

1 个答案:

答案 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