【发布时间】:2013-12-23 01:31:33
【问题描述】:
我正在尝试用一行 AWK 代码更正一个文件与另一个文件。我试图从 FILE2 中取出 $1,在 FILE1 中查找,得到相应的 $3 和 $4。将它们设置为变量后,我希望程序停止评估 FILE1,将 $10 和 $11 从 FILE2 更改为变量的值,然后打印出来。
提取变量后,我无法让 awk 从 FILE1 切换到 FILE2。我已经尝试过 nextfile,但这会重置程序并且它会厌倦从 FILE2 中提取变量,我将 NR 设置为最后一个记录,但它没有切换。
我也在做一个循环来从 FILE1 中取出每一行,但如果这可以成为脚本的一部分,我相信它会加快速度,而不必一遍又一遍地重新打开 awk。
这是我想出来的部分。
for file in `cut -f 1 FILE2`; do
awk -v a=$file '$1=a{s=$2;q=$4; ---GO TO FILE1---}{if ($1==a) {$10=s; $11=q; print 0;exit}' FILE1 FILE2 >> FILEOUT
done
一个快速示例集注意:尽管我是这样写的,但这两个文件的顺序不同,大小约为 8GB,因此排序有点笨拙。
文件1
A 12345 + AJD$JD
B 12504 + DKFJ#%
C 52042 + DSJTJE
文件2
A 2 3 4 5 6 7 8 9 345 D$J
B 2 3 4 5 6 7 8 9 250 KFJ
C 2 3 4 5 6 7 8 9 204 SJT
文件
A 2 3 4 5 6 7 8 9 12345 AJD$JD
B 2 3 4 5 6 7 8 9 12504 DKFJ#%
C 2 3 4 5 6 7 8 9 52042 DSJTJE
这是我根据下面肯特的回答开始工作的代码。
awk 'NR==FNR{a[$1]=$2" "$4;next}$1 in a{$9=$9" "a[$1]}{$10="";$11=""}2' f1 f2
【问题讨论】:
-
提供输入/输出示例将帮助您更快地得到答案。