我有两个CSV文件,第一个如下所示:

文件1:

3124,3124,0,2,,1,0,1,1,0,0,0,0,0,0,0,0,1106,11
6118,6118,0,0,,0,0,1,0,0,0,0,1,1,1,1,1,5156,51
6679,6679,0,0,,1,0,1,0,0,0,0,0,1,0,1,0,1106,11
5249,5249,0,0,,0,0,1,1,0,0,0,0,0,0,0,0,1106,13
2658,2658,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,1197,11
4322,4322,0,0,,1,0,1,1,0,0,0,0,0,0,0,0,1307,13

文件2:
7792,1307,2012-06-07,,,,
5249,4001,2016-07-02,,,,
6001,1334,2017-01-23,,,,
2658,4001,2009-02-09,,,,
9279,1326,2014-12-20,,,,

我需要的:
如果file2中的$2 = 4001,则必须将file2的$1与file1匹配,如果file1中的$18 =匹配的1106$1,则打印该行。

预期的输出:
5249,5249,0,0,,0,0,1,1,0,0,0,0,0,0,0,0,1106,13

我尝试了以下方法,但没有成功。
awk 'NR=FNR {A[$1]=$1;next} {print $1}'

附注:文件已压缩,因此我必须使用zcat命令

最佳答案

我会尝试类似的东西:

$ cat t.awk
BEGIN { FS = "," }

# Processing first file
NR == FNR && $18 == 1106 { a[$1] = $0; next }

# Processing second file
$2 == 4001 && $1 in a { print a[$1] }


$ awk -f t.awk file1.txt file2.txt
5249,5249,0,0,,0,0,1,1,0,0,0,0,0,0,0,0,1106,13

关于linux - AWK的多输入文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31583466/

10-11 21:02