我有一个包含11列文字或数字的大文件:
ETNOFIKK 03001 E0146 a1 1001 0146 10303001 10 500 EKO24 2001_200
ETNOFIKK 03002 E0147 a1 1001 0147 10303002 10 500 EKO24 2001_200
ETNOFIKK 03003 E0148 a1 1001 0148 10303003 10 500 EKO24 2001_200
...
和另一个只有一列数字的文件:
0146
0148
...
当第6列与第二个文件的条目匹配时,我需要从第一个文件中提取行。因此,在上面的示例中,如果第二个文件只包含两个条目,则从第一个文件打印第一行和第三行。
由于
答案 0 :(得分:2)
使用awk
awk 'FNR==NR {a[$1];next} $6 in a' file2 file1
ETNOFIKK 03001 E0146 a1 1001 0146 10303001 10 500 EKO24 2001_200
ETNOFIKK 03003 E0148 a1 1001 0148 10303003 10 500 EKO24 2001_200
这将file2
(索引)存储在数组中
然后查看数组中$6
是否相等,是,打印行。
答案 1 :(得分:1)
sed 's/^/^\\([^[:blank:]]\\{1,\\}[[:blank:]]\\{1,\\}\\)\\{5\\}/' Other.file > /tmp/pregrep.txt
egrep -f /tmp/pregrep.txt Source.File
只能使用sed(在文件和管道的猫之后)但是更多的指令。所以Jotne的awk似乎是冠军
答案 2 :(得分:0)
试试这个:
awk 'FNR==NR &&NF{a[$1];next} $6 in a' file2 file1