这是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
答案 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