awk 使用另一个文件数据过滤一个文件的数据



这是问题(Awk:使用一个文件过滤另一个文件(out.tr((的扩展名

awk 'FNR==NR { a[$NF]; next } $NF in a' other main    

我完全理解(在 a 中$NF(,即在数组 a 中搜索主文件的最后一列。但是存储在数组 a[$NF] 中的是其他文件的最后一列还是完整文件。

我有一个其他文件(逗号分隔(,想使用第二列来过滤主文件的数据。该命令如何知道 a[$2] 正在存储必须存储在数组中并用于过滤主文件的其他文件的第二列。

例如,如果我有一个包含数据的主文件,例如

Date|par|Id|Number
21-Jun|0|123000|20000
20-Jun|1|123000|20000
21-Jun|0|156000|2327
21-Jun|1|156000|500000
21-Jun|0|250000|15000
20-Jun|0|251000|15000
20-Jun|0|100000|423423
18-Jun|1|102000|30000
19-Jun|0|102000|1500

用于过滤主文件 (Id( 的其他文件 (id1(

date,id1,id2,id3
21Jun,123000,5665,34234
21Jun,102000,23654,324
19Jun,251000,1231,123123

上述结果应为

Date|par|Id|Number
21-Jun|0|123000|20000
20-Jun|1|123000|20000
20-Jun|0|251000|15000
18-Jun|1|102000|30000
19-Jun|0|102000|1500

这应该有效,但由于您在第 3 列中没有匹配的 ID,因此您发布的输入文件不会打印任何内容

$ awk -F, 'NR==FNR{a[$3];next} $3 in a' filter FS='|' main

也许你的意思是过滤器的第二列(id1 字段(,然后更改为

$ awk -F, 'NR==FNR{a[$2];next} $3 in a' filter FS='|' main

你会得到

21-Jun|0|123000|20000
20-Jun|1|123000|20000
20-Jun|0|251000|15000
18-Jun|1|102000|30000
19-Jun|0|102000|1500

也许要添加标题

$ awk -F, 'NR==FNR{a[$2];next} FNR==1 || $3 in a' filter FS='|' main
Date|par|Id|Number
21-Jun|0|123000|20000
20-Jun|1|123000|20000
20-Jun|0|251000|15000
18-Jun|1|102000|30000
19-Jun|0|102000|1500

最新更新