基于密钥的AWK合并文件
我有两个文件: 1.txt基于密钥的AWK合并文件,awk,Awk,我有两个文件: 1.txt jeden:AA dwa:BB trzy:CC cztery:DD piec:EE szesc:FF ttttttt:to siedem:GG osiem:HH dziewiec:II dziesiec:JJ JJ:jola EE:ela BB:baska FF:flora II:irga AA:adam to:llll DD:darek CC:celina HH:hela GG:gosia 2.txt jeden:AA
jeden:AA
dwa:BB
trzy:CC
cztery:DD
piec:EE
szesc:FF
ttttttt:to
siedem:GG
osiem:HH
dziewiec:II
dziesiec:JJ
JJ:jola
EE:ela
BB:baska
FF:flora
II:irga
AA:adam
to:llll
DD:darek
CC:celina
HH:hela
GG:gosia
2.txt
jeden:AA
dwa:BB
trzy:CC
cztery:DD
piec:EE
szesc:FF
ttttttt:to
siedem:GG
osiem:HH
dziewiec:II
dziesiec:JJ
JJ:jola
EE:ela
BB:baska
FF:flora
II:irga
AA:adam
to:llll
DD:darek
CC:celina
HH:hela
GG:gosia
我想根据密钥合并这两个文件。预期结果:
jeden: adam
dwa: baska
trzy: celina
cztery: darek
piec: ela
szesc: flora
ttttttt: llll
siedem: gosia
osiem: hela
dziewiec: irga
dziesiec: jola
我试过这个:
$ awk -F ":" '{getline a < "2.txt" split(a, b, ":"); if($2==b[1]) print $1":", b[2]}' 1.txt
ttttttt: llll
$awk-F:“{getline a<“2.txt”split(a,b,”:”;如果($2==b[1])打印$1:”,b[2]}'1.txt
ttt:llll
谢谢您的帮助。您可以通过多个步骤完成此操作
$ gawk -F: '{print $2 " " $1}' 1.txt | sort > 1.1.txt
$ gawk -F: '{print $1 " " $2}' 2.txt | sort > 2.1.txt
$ paste -d' ' 1.1.txt 2.1.txt | gawk '{print $2 ": " $4}'
jeden: adam
dwa: baska
trzy: celina
cztery: darek
piec: ela
szesc: flora
siedem: gosia
osiem: hela
dziewiec: irga
dziesiec: jola
ttttttt: llll
您可以通过多个步骤完成此操作
$ gawk -F: '{print $2 " " $1}' 1.txt | sort > 1.1.txt
$ gawk -F: '{print $1 " " $2}' 2.txt | sort > 2.1.txt
$ paste -d' ' 1.1.txt 2.1.txt | gawk '{print $2 ": " $4}'
jeden: adam
dwa: baska
trzy: celina
cztery: darek
piec: ela
szesc: flora
siedem: gosia
osiem: hela
dziewiec: irga
dziesiec: jola
ttttttt: llll
单向:
awk '
BEGIN {
FS = "[: ]*";
OFS = ":";
}
FNR == NR {
keys[ $1 ] = $2;
next;
}
{
printf "%s%s %s\n", $1, OFS, ($2 in keys) ? keys[ $2 ] : "???";
}
' 2.txt 1.txt
这将产生:
jeden: adam
dwa: baska
trzy: celina
cztery: darek
piec: ela
szesc: flora
ttttttt: llll
siedem: gosia
osiem: hela
dziewiec: irga
dziesiec: jola
单向:
awk '
BEGIN {
FS = "[: ]*";
OFS = ":";
}
FNR == NR {
keys[ $1 ] = $2;
next;
}
{
printf "%s%s %s\n", $1, OFS, ($2 in keys) ? keys[ $2 ] : "???";
}
' 2.txt 1.txt
这将产生:
jeden: adam
dwa: baska
trzy: celina
cztery: darek
piec: ela
szesc: flora
ttttttt: llll
siedem: gosia
osiem: hela
dziewiec: irga
dziesiec: jola
我会使用coreutils
join
来实现以下目的:
join -t: -1 2 -2 1 -o 1.1 2.2 \
<(sort -t: -k2,2 1.txt | sed -r 's/\s+$//') \
<(sort 2.txt | sed -r 's/\s+$//')
如果您真的想在冒号后面添加额外的空格,请将
|sed's/:/&/'
附加到命令中,我将使用coreutilsjoin
来实现此目的:
join -t: -1 2 -2 1 -o 1.1 2.2 \
<(sort -t: -k2,2 1.txt | sed -r 's/\s+$//') \
<(sort 2.txt | sed -r 's/\s+$//')
如果您确实需要冒号后面的额外空间,请将
|sed's/:/&/'
附加到命令中谢谢,这是一个很好的解决方案。您还使用getline编写另一个解决方案吗?谢谢,很好的解决方案。您是否仍然使用getline编写另一个解决方案?