仅当第二个文本文件中也存在第二个字段时,才将第一个文本文件中的两个文本文件组合在一起

时间:2017-07-02 18:48:08

标签: linux bash text-files

我有两个文本文件,我想以某种方式组合,然后根据第一个文件中的第二个字段进行替换。以下是第一个文件的格式。这是来自语料库的单词。

file_1.txt

1000 the
999 been
950 phone
850 ball
800 watch
799 porch

文件2是可以在第一个文件中找到的一些单词,但是在第二个字段中有该单词的细分。

file_2.txt

the th e
been be en
shirt sh ir t
phone pho ne
desk d esk
chair cha i r
watch wa t c h
floor f loo r

我想得到的是下面的内容。当两个文件中都有单词时,我喜欢只从第二个文件中删除单词。

file_3.txt

1000 th e
999 be en
950 pho ne
850 ball
800 wa t c h
799 porch

我一直试图根据字段在两个文件之间做一些sort内容,但我很遗憾。

1 个答案:

答案 0 :(得分:0)

你可以使用Awk:

awk 'FNR == NR { m[$2]=$1 } FNR != NR && $1 in m { w=$1; $1=""; print m[w] $0}' file_1.txt file_2.txt

那是:

  • 对于第一个文件中的每一行,构建一个word -> id
  • 的地图
  • 对于第二个文件中的每一行:
    • 将第一个字段(单词)保存在变量
    • 清除第一个字段
    • 使用地图和单词以及行的其余部分
    • 打印ID