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

时间:2018-06-25 12:49:00

标签: awk

这是Question(Awk: using a file to filter another one (out.tr))的扩展名

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

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

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

例如如果我的MainFile包含

之类的数据
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

用于过滤MainFile(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

2 个答案:

答案 0 :(得分:1)

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

 public class MyTests : TestServerFixture
 {
     public MyTests(WebApplicationFactory<Startup> factory)
         : base(factory)
     {
     }

也许您是指过滤器的第二列(id1字段),然后更改为

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

你会得到

$ 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

答案 1 :(得分:0)

遵循awk可能会帮助您。

awk 'BEGIN{print "Date|par|Id|Number"} FNR==NR{a[$2];next} ($3 in a)' FS="," id1 FS="|" mainfile

输出如下。

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