根据指定行合并两个文件

根据指定行合并两个文件

我有文件1.txt看起来如下:

search
http://google.com
mail
https://gmail.com

文件2.txt看起来像这样:

This is a search tool
This is your mail account

我需要以这样的方式合并它们文件1.txt将看起来像这样:

This is a search tool
http://google.com
This is your mail account
https://gmail.com

答案1

也试试

awk '
NR == FNR   {T[$0]
             next
            }
            {for (t in T) if (t ~ $1) $1 = t
            }
1
' file2 file1
This is a search tool
http://google.com
This is your mail account
https://gmail.com

答案2

使用awk

awk 'NR==FNR{ (NR%2? keyword=$0: seen[keyword]=$0 ); next}  
     { for (keys in seen)if ($0 ~ keys) {print $0, seen[keys] }
}' OFS='\n' file1  file2

输出是:

This is a search tool
http://google.com
This is your mail account
https://gmail.com

解释:

如果它是第一个文件NR==FNR,并且记录/行号甚至将NR%2$0行保存到名为 else 的变量中,则将该行添加到以找到的关键字作为索引命名的keyword关联数组中,然后读取该行。seennext

...一旦第一个文件继续,for-loop我们就会遍历数组见过变量keys用于指向该数组的索引元素,并检查该元素是否keys可以在该行中匹配,file2然后print $0是其键值,并seen[keys]用 ewline 分隔\n

相关内容