我尝试在FILE1
的第2列FILE2
内搜索值,并在匹配时从FILE2
的第3列打印值。下面是我的文件和输出的示例:
FILE1:
1
2
3
4
FILE2:
0,1,Y,8
4,5,6,7
7,4,X,9
OUTPUT:
Y
X
任何人都可以帮我这么做吗?
答案 0 :(得分:1)
如果你可以将第一个文件放在内存中,那么我会使用awk这样的东西:
awk -F, 'NR == FNR { a[$1]; next } $2 in a { print $3 }' file1 file2
这将存储数组a
中第一个文件的第一个字段,然后在相应的第二个字段匹配时从第二个文件中打印第三个字段。
答案 1 :(得分:0)
使用Unit: relative
expr min lq mean median uq max neval cld
head 1.808732 1.917790 2.087754 1.902117 2.340030 2.441812 10 b
SD 1.923151 1.937828 2.150168 2.040428 2.413649 2.436297 10 b
I 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 10 a
的替代解决方案,需要在连接字段上对文件进行排序。
join
答案 2 :(得分:0)
以下是Tom Fenech的优秀答案的变体(部分原因是因为不需要排序),但其优点是不需要测试'NR == FNR'。因此可能会更快:
awk -F, -v dict=FILE1 'BEGIN {while(getline<dict){a[$1]=1}}
$2 in a {print $3}'
当然这也需要足够的内存来存储FILE1的哈希表,但正如已经指出的那样,如果FILE1只有100MB,这应该不是问题。