![根据指定行合并两个文件](https://linux22.com/image/139053/%E6%A0%B9%E6%8D%AE%E6%8C%87%E5%AE%9A%E8%A1%8C%E5%90%88%E5%B9%B6%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6.png)
我有文件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
关联数组中,然后读取该行。seen
next
...一旦第一个文件继续,for-loop
我们就会遍历数组见过变量keys
用于指向该数组的索引元素,并检查该元素是否keys
可以在该行中匹配,file2
然后print $0
是其键值,并seen[keys]
用 ewline 分隔\n
。