gpt4 book ai didi

awk - 如何使用 awk 或 sed 合并来自两个文件的匹配内容

转载 作者:行者123 更新时间:2023-12-02 15:46:42 24 4
gpt4 key购买 nike

我有两个文件,file1 和 file2
我需要用file1的每一行搜索file2,一旦匹配就把它们放在另一种形式中
我的进步:

awk 'FNR==NR{ids[$0]=$0;next}{for(id in ids){if($0 ~ "\\y"id"\\y"){print "- name:"id; print "  version: " ; print}}}' file1 file2

文件1:

attr-2.4.48
bzip2-1.0.8
curl-7.71.1
dnsmasq-2.86
dropbear-2022.82
elfutils-0.179
ethtool-5.4

文件2:

  url: https://sourceforge.net/projects/lzmautils/files/xz-5.2.5.tar.gz/download
url: http://download.savannah.nongnu.org/releases/attr/attr-2.4.48.tar.gz
url: https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz
url: https://curl.se/download/curl-7.71.1.tar.bz2
url: https://sourceware.org/elfutils/ftp/0.179/elfutils-0.179.tar.bz2
url: https://git.kernel.org/pub/scm/network/ethtool/ethtool.git/snapshot/ethtool-5.4.tar.gz

输出

- name: attr
version: 2.4.48
url: http://download.savannah.nongnu.org/releases/attr/attr-2.4.48.tar.gz
- name: bzip2
version: 1.0.8
url: https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz
- name: curl
version: 7.71.1
url: https://curl.se/download/curl-7.71.1.tar.bz2
- name: dnsmasq
version: 2.86
url:
- name: dropbear
version: 2022.82
url:
- name: elfutils
version: 0.179
url: https://sourceware.org/elfutils/ftp/0.179/elfutils-0.179.tar.bz2
- name: ethtool
version: 5.4
url: https://git.kernel.org/pub/scm/network/ethtool/ethtool.git/snapshot/ethtool-5.4.tar.gz

最佳答案

您可以使用 cutgrep 在一个小的 shell 脚本中自然地完成您想要的事情。

我们可以使用 sed 而不是 cutgrep 组合,并获得如下 shell 脚本:

cat "file1" | while read prginfo
do
name="${prginfo%%-*}"
version="${prginfo##*-}"
url="$(sed -n "/${prginfo}/ {s/url: //;p}" file2)"
printf -- "- name: %s\n version: %s\n url: %s\n" "$name" "$version" "$url"
done

我们遍历 file1 的行(由于 cat|while read)。

名称和版本部分是通过 shell 参数扩展 从 file1 的行中解析出来的。

url通过sed解析:

  • -n 用于抑制不匹配行的输出
  • /${prginfo}/ 用于匹配该行并在分支内应用进一步的 sed 命令:
    • s/url://;p} 替换“url:”并打印修改后的行
  • 我们可以用 url=$(grep "$prginfo""$2"| cut -d\-f2)
  • 替换这一行

这比第一次读取和存储 file2 要短一些。但如果这些文件很大,可能需要更长的时间。

关于awk - 如何使用 awk 或 sed 合并来自两个文件的匹配内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73936520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com