我有2个文件File1和File2。 File1有一些以“|”分隔的值。例如,
A|a
C|c
F|f
File2也有一些以“|”分隔的值。例如,
a|1
b|2
c|3
d|4
e|5
表示File1中的第2列与File2的第1列相似。
我必须创建具有预期输出的第三个文件File3
A|a|1
C|c|3
我尝试在循环中获取每个记录,并使用“awk”在File2中搜索。
虽然有效,但问题是File1和File2都有超过500万条记录。
我需要一个优化的解决方案。
答案 0 :(得分:2)
您可以使用此awk
,
awk -F'|' 'NR==FNR{a[$2]=$1;next} $1 in a { print a[$1],$1,$2 }' OFS="|" file1 file2 > file3
更清晰的方式:
awk 'BEGIN{ OFS=FS="|";} NR==FNR{a[$2]=$1;next} $1 in a { print a[$1],$1,$2 }' file1 file2 > file3
根据@Kent建议:
如果您的file2
在file3
中有两列以上的列,那么,
awk 'BEGIN{ OFS=FS="|";} NR==FNR{a[$2]=$1;next} $1 in a { print a[$1],$0 }' file1 file2 > file3
下面,
FS
- 字段分隔符
OFS
- 输出字段分隔符
答案 1 :(得分:1)
这是join
创建的内容:
$ join -t '|' -o '1.1,1.2,2.2' -1 2 -2 1 file1 file2
A|a|1
C|c|3
man join
了解更多详细信息,并特别注意需要在连接字段上排序的文件(即file1的第2个字段和file2的第1个字段),因为您发布的示例输入是。