Awk 根据特定字段打印两个文件的信息
我有两个文件。当第一个字段存在且相等时,我需要打印两个文件中的信息,如示例所示Awk 根据特定字段打印两个文件的信息,awk,Awk,我有两个文件。当第一个字段存在且相等时,我需要打印两个文件中的信息,如示例所示 file 1 20;"aaaaaa";99292929 24;"fsfdfa";42933294 30;"fsdsff";23832299 38;"fjsdjl";62673777 file 2 13;"fsdffsdfs";2272777 20;"ffuiiii";23728877 30;"wdwfsdh";8882817 40;"sfjslll";82371111 expect result: file1;2
file 1
20;"aaaaaa";99292929
24;"fsfdfa";42933294
30;"fsdsff";23832299
38;"fjsdjl";62673777
file 2
13;"fsdffsdfs";2272777
20;"ffuiiii";23728877
30;"wdwfsdh";8882817
40;"sfjslll";82371111
expect result:
file1;20;"aaaaaa";99292929;file2;20;"ffuiiii";23728877
file1,30;"fsdsff";23832299;file2;30;"wdwfsdh";8882817
我试过:
awk 'FNR==NR{a[$1]=$1;next} $1 in a' file2 file1 > newfile
逻辑上可以,但我无法显示所需的字段。
awk
将有助于:
awk -F ';' 'NR==FNR{rec[$1]=FILENAME FS $0}
NR>FNR{
if($1 in rec){
print rec[$1] FS FILENAME FS $0
}
}' file{1..2}
应该这样做。
join-t';'file1 file2
在没有任何代码的情况下完美地处理连接(只要文件已排序),但您的输出格式无法单独使用该工具获得,此时您最好使用awk
执行连接
$ cat tst.awk
BEGIN { FS=OFS=";" }
{ $0 = FILENAME FS $0 }
NR==FNR { a[$2] = $0; next }
$2 in a { print a[$2], $0 }
$ awk -f tst.awk file1 file2
file1;20;"aaaaaa";99292929;file2;20;"ffuiiii";23728877
file1;30;"fsdsff";23832299;file2;30;"wdwfsdh";8882817