![按列合并两个文件,缺少条目时添加 0](https://linux22.com/image/208979/%E6%8C%89%E5%88%97%E5%90%88%E5%B9%B6%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%8C%E7%BC%BA%E5%B0%91%E6%9D%A1%E7%9B%AE%E6%97%B6%E6%B7%BB%E5%8A%A0%200.png)
我有两个文件,如下所示。
- File1 File1中有五个国家
>USA
>England
>France
>Japan
>Thailand
- File2 File2中只有四个
>USA
>England
>Japan
>Thailand
我用来paste -d "," file1.txt file2.txt1
将两个文件合并在一起
- 输出
>USA ,>USA
>England,>England
>France,>Japan
>Japan,>Thailand
>Thailand,
正如您在此处所看到的,输出的两个文件的列表顺序彼此不一致,因为 File2 -France 中缺少一个值。相反,它在“法国”之后发生了变化。
- 欲望输出
>USA >USA
>England >England
>France >0 (or any symbols)
>Japan >Japan
>Thailand >Thailand
如何编写 UNIX 命令语句,将两个文件合并在一起并用 0 替换缺失值,但其余订单保持匹配?需要添加、更改或修改哪些内容paste -d "," file1.txt file2.txt1
任何帮助将不胜感激。谢谢。
答案1
既然你说“任何符号”都可以, diff 可能就足够了:
diff -w -y file1 fiel2
>USA >USA
>England >England
>France <
>Japan >Japan
>Thailand >Thailand
缺失行由>
或<
指示,该行分别出现在 file2 或 1 中。-w
比较期间将忽略空格。
答案2
使用awk
:
awk 'NR==FNR{a[$1]=$1;next}
{if ($1 in a) print a[$1],$1; else print $1 ,">0"}' file2 file1