将匹配字符串追加到特定行(sed/bash)

将匹配字符串追加到特定行(sed/bash),bash,shell,sed,awk,Bash,Shell,Sed,Awk,使用bash/sed,我试图搜索匹配的字符串,当找到匹配项时,它会将该变量附加到相应行的末尾 两份清单: [linuxbox tmp]$ cat lista a 23 c 4 e 55 b 2 f 44 d 74 [linuxbox tmp]$ cat listb a 3 e 34 c 84 b 1 f 500 d 666666 #!/bin/bash rm -rf listc cat listb |while read rec do var1="$(echo $rec | awk

使用bash/sed,我试图搜索匹配的字符串,当找到匹配项时,它会将该变量附加到相应行的末尾

两份清单:

[linuxbox tmp]$ cat lista
a 23
c 4
e 55
b 2
f 44
d 74
[linuxbox tmp]$ cat listb
a 3
e 34
c 84
b 1
f 500
d 666666

#!/bin/bash
rm -rf listc

cat listb |while read rec
do
    var1="$(echo $rec | awk '{ print $1 }')"
    var2="$(echo $rec | awk '{ print $2 }')"
    if egrep "^$var1" lista; then
            sed "/^$var1/ s/$/ $var2/1" lista >> listc
    fi
done
当我运行它时,我得到:

[linuxbox tmp]$ ./blah.sh
a 23
e 55
c 4
b 2
f 44
d 74

[linuxbox tmp]$ cat listc
a 23 3
c 4
e 55
b 2
f 44
d 74
a 23
c 4
e 55 34
b 2
f 44
d 74
a 23
c 4 84
e 55
b 2
f 44
d 74
a 23
c 4
e 55
b 2  1
f 44
d 74
a 23
c 4
e 55
b 2
f 44 500
d 74
a 23
c 4
e 55
b 2
f 44
d 74 666666
我想要得到的结果是:

a 23 3
e 55 34
c 4 84
b 2  1
f 44 500
d 74 666666
我做错了什么?有没有更好的方法来实现这一点


提前谢谢。

单向使用awk:

awk 'FNR==NR { array[$1]=$2; next } { if ($1 in array) print $1, array[$1], $2 }' lista listb
结果:

a 23 3
e 55 34
c 4 84
b 2 1
f 44 500
d 74 666666

单向使用
awk

awk 'FNR==NR { array[$1]=$2; next } { if ($1 in array) print $1, array[$1], $2 }' lista listb
结果:

a 23 3
e 55 34
c 4 84
b 2 1
f 44 500
d 74 666666

如果您不介意获得已排序的输出:

join <(sort lista) <(sort listb)

join如果您不介意获得排序输出:

join <(sort lista) <(sort listb)
join基于您的输入文件(单个文件中没有重复的键),以下操作将实现此目的:

>> for key in $(awk '{print $1}' lista) ; do
+>    echo $key $(awk -vK=$key '$1==K{$1="";print}' lista listb)
+> done

a 23 3
c 4 84
e 55 34
b 2 1
f 44 500
d 74 666666
根据您的输入文件(单个文件中没有重复的密钥),以下操作将实现此目的:

>> for key in $(awk '{print $1}' lista) ; do
+>    echo $key $(awk -vK=$key '$1==K{$1="";print}' lista listb)
+> done

a 23 3
c 4 84
e 55 34
b 2 1
f 44 500
d 74 666666

sed
-n
一起使用,并将
p
附加到替换命令。将
sed
-n
一起使用,并将
p
附加到替换命令。所有操作都没有问题;然而,这是最简洁的。谢谢。所有的工作都没问题;然而,这是最简洁的。非常感谢。