这是我的两个输入文件:
file1.txt
1 34
2 55
3 44
6 77
file2.txt
1 12
2 7
5 32
我希望我的输出是:
1 34 12
2 55 0
3 44 0
5 0 32
6 77 0
我需要在awk中执行此操作,虽然我能够合并文件,但我不知道如何在不丢失信息的情况下执行此操作...
awk -F"\t" 'NR==FNR {h[$1] = $2; next }{print $1,$2,h[$2]}' file1.txt file2.txt > try.txt
awk '{ if ($3 !="") print $1,$2,$3; else print $1,$2,"0";}' try.txt > output.txt
输出是:
1 34 12
2 55 7
3 44 0
6 77 0
对不起,我知道这一定很容易,但我在这个世界上很新!我需要帮助!!!在此先感谢!!
答案 0 :(得分:1)
此命令为您提供所需的输出:
awk 'NR==FNR{a[$1]=$2;next}
{if($1 in a){print $0,a[$1];delete a[$1]}
else print $0,"0"}
END{for(x in a)print x,"0",a[x]}' file2 file1|sort -n|column -t
请注意,我使用了sort
和column
来排序&格式化输出。
输出:( 注意我猜2 55 0
是预期输出中的拼写错误)
1 34 12
2 55 7
3 44 0
5 0 32
6 77 0
答案 1 :(得分:1)
以下是使用join
和awk
的另一种方式:
join -a1 -a2 -o1.1 2.1 1.2 2.2 -e0 file1 file2 | awk '{print ($1?$1:$2),$3,$4}' OFS='\t'
1 34 12
2 55 7
3 44 0
5 0 32
6 77 0
-a
开关允许加入不可配对的线路。-o
构建我们的输出格式-e
允许指定应该为不存在的值打印的内容awk
只需完成最终格式化。