bash脚本比较2个文件并在需要的地方更新

时间:2018-08-29 18:34:02

标签: bash awk sed

我正在尝试使用bash脚本用File2.conf中的文本更新File1.conf。

〜/ .group / File1.conf

group b = bill john
group a = bill amy john

./ File2.conf

group b = bill amy cara mike joe
group c = bill steven mike larry

导致〜/ .group / File1.conf看起来像

group b = bill amy cara mike joe
group a = bill amy john
group c = bill steven mike larry

我一直在查看awksed,但似乎无法正确获得输出。唯一的常数是group $ =和间距。

2 个答案:

答案 0 :(得分:1)

看看这个sort

$ sort -t'=' -uk1,1 file2 file1
group a = bill amy john
group b = bill amy cara mike joe
group c = bill steven mike larry

答案 1 :(得分:0)

我会写这个awk:

awk -F= 'NR == FNR {seen[$1]; print; next} !($1 in seen)' File{2,1}.conf

要将输出保存回File1.conf,

  1. 使用临时文件:

    t=$(mktemp)
    awk '...' File{2,1}.conf > "$t" && mv "$t" File1.conf
    
  2. 安装moreutils软件包并使用sponge

    awk '...' File{2,1}.conf | sponge File1.conf