我正在尝试删除列表A中与列表B中的行不匹配的所有行。
我的问题是两个列表的格式仅对前16列相同。
我只想按这些初始列比较列表,但我想保留列表A中每个匹配行的全部内容。
两个清单的示例内容:
列表A:
2009-02-07T18:54:59.010Z,-5.878,146.884,34,6.3,mwc
2009-02-09T14:09:05.110Z,-5.902,146.967,35,5.8,mwc
2009-02-10T07:29:33.500Z,-22.82,-68.484,103,5.7,mwc
列表B:
2009-02-09T14:09
2009-02-11T09:31
2009-02-11T13:52
我最初的想法是使用grep -F来做到这一点,但我没有运气。有没有办法用awk或sed做到这一点?
干杯。
答案 0 :(得分:0)
这假设列表A中的行相对于前16个字符是唯一的(如果不是,您只想打印最新的字符)。此外,如果重复列表B中的行,则输出也将重复列表A中的行。
$ awk -F: 'NR==FNR{a[$1 $2]=$0; next} ($1 $2) in a {print a[$1 $2]}' a.txt b.txt
2009-02-09T14:09:05.110Z,-5.902,146.967,35,5.8,mwc
答案 1 :(得分:0)
grep
足够简单,只要您想要匹配第一个文件中第二个文件中的文本(或者仅在开始时出现模式)
$ cat f1
2009-02-07T18:54:59.010Z,-5.878,146.884,34,6.3,mwc
2009-02-09T14:09:05.110Z,-5.902,146.967,35,5.8,mwc
2009-02-10T07:29:33.500Z,-22.82,-68.484,103,5.7,mwc
$ cat f2
2009-02-09T14:09
2009-02-11T09:31
2009-02-11T13:52
$ grep -Ff f2 f1
2009-02-09T14:09:05.110Z,-5.902,146.967,35,5.8,mwc