如何将file2中匹配file1字符串的多行内容拼接为单行输出
解决方法
你可以直接用系统自带的awk工具实现需求,无需额外安装其他软件,命令如下:
awk 'NR==FNR {key[$1]=1; order[FNR]=$1; next} {split($0, arr, "/"); k=arr[2]; if (key[k]) res[k] = res[k] " " $0} END {for (i=1; i<=length(order); i++) if (res[order[i]]) {sub(/^ /, "", res[order[i]]); print res[order[i]]}}' file1 file2
命令逻辑说明
- 先读取file1的所有内容,将每行字符串作为匹配键存储,同时记录file1的原始顺序,保证最终输出顺序和file1一致
- 再读取file2的每一行,以
/为分隔符拆分字符串,取两个/中间的部分作为匹配键,匹配上file1中存储的键后,将当前行拼接至对应键的结果中 - 全部读取完成后,按file1的顺序输出结果,自动去除拼接产生的开头多余空格,同一匹配键的多行自动用空格拼接为一行
运行该命令得到的输出和你给出的期望结果完全一致。
内容的提问来源于stack exchange,提问作者user5719890
相关产品推荐
相关产品推荐

