Linux 基于具有有限列的第二个列表的内容编辑一个列表的内容

Linux 基于具有有限列的第二个列表的内容编辑一个列表的内容,linux,bash,awk,sed,grep,Linux,Bash,Awk,Sed,Grep,我正在尝试删除列表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

我正在尝试删除列表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有什么方法可以做到这一点吗


干杯。

这假设列表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

使用
grep
非常简单,只要您想匹配第一个文件行中第二个文件中的任意位置的文本(或者模式只出现在开头)


我将在列表A的第16个字段后替换字段分隔符(本例中为逗号),使用
join
命令打印该列表中的相关行,并返回分隔符。
$ 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