【问题标题】:How to extract lines from a file when the second columns of a file matches the values in another file当文件的第二列与另一个文件中的值匹配时如何从文件中提取行
【发布时间】:2019-07-14 20:11:03
【问题描述】:

我有两个文件。

文件 1:

4
14
18
45
53
60
64
102
106
158
162

文件2:

28 1 2
54 1 2
90 1 1
103 1 1
155 1 17
191 1 1
235 1 1
245 4 1
275 4 1
362 4 1
377 18 1
391 18 1
413 18 2
466 18 2
492 18 2
494 18 41
498 45 1
522 45 1
529 57 3
542 53 1
560 58 6
562 164 25
568 164 5

如果文件 2 的第二列与文件 1 中的值匹配,我想从文件 2 中提取值。

所以预期的输出将是:

    245 4 1
    275 4 1
    362 4 1
    377 18 1
    391 18 1
    413 18 2
    466 18 2
    492 18 2
    494 18 41
    498 45 1
    522 45 1
    542 53 1

我在网上看到很多解决方案是使用python或Perl,但是,我想使用linux命令来做到这一点,有什么想法吗?

【问题讨论】:

    标签: linux command-line command


    【解决方案1】:

    这应该做吗?

    awk 'FNR==NR{a[$0]++};FNR!=NR{if($2 in a){print}}' file1 file2
    245 4 1
    275 4 1
    362 4 1
    377 18 1
    391 18 1
    413 18 2
    466 18 2
    492 18 2
    494 18 41
    498 45 1
    522 45 1
    542 53 1
    

    解释:

    • 我们手动 awk 两个文件(在这种情况下,顺序很重要!)。
    • 只要我们读取第一个文件 (FNR==NR),我们就会将每个值存储在数组中 a[$1]++
    • 当我们到达第二个文件时,我们只检查第二个文件的第二列 ($2) 中的值是否在数组中;如果是,我们打印出来。

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      相关资源
      最近更新 更多