我有两个文件。我想对文件进行排序并加入第一列。例如:
第一个文件:
100. ttt
200. 616te
300. 7a27
7373qq
第二个文件:
100. ttt
200. yoga
300. 7a27
8371gd
为了加入这两个文件,我执行以下操作:
join <(sort first_file.txt) <(sort second_file.txt) >joined.txt
我希望得到的输出是:
100. ttt. ttt
200. 616te. yoga
300. 7a27. 7a27
7373qq. 8371gd
然后我想查看第 2 列和第 3 列不同的行。为此,我这样做:
awk '$2!=$3 {print $1, $2, $3}' joined.txt >different.txt
正如您所看到的,前两个文件中的一些值为空。因此,当我使用 join 时,我会收到以下错误:
join: /dev/fd/63:26456: is not sorted: 100 7373qq
join: /dev/fd/62:23295: is not sorted: 100 8371gd
我该如何处理这个问题?见解将不胜感激。
答案1
如果这不是您所需要的全部,那么编辑您的问题以提供更真正具有代表性的示例输入和预期输出,包括这不符合您想要的效果的情况:
$ paste file1 file2 | sed 's/\t[^ ]* */.\t/'
100. ttt. ttt
200. 616te. yoga
300. 7a27. 7a27
7373qq. 8371gd
如果您需要上述中间输出以及最终比较输出,则:
$ paste file1 file2 | sed 's/\t[^ ]* */.\t/' | tee intermediate | awk '($NF".")!=$(NF-1)'
200. 616te. yoga
7373qq. 8371gd
或者如果你不这样做的话:
$ paste file1 file2 | awk '{sub(/\t[^ ]* */,".\t")} ($NF".")!=$(NF-1)'
200. 616te. yoga
7373qq. 8371gd
或者如果您实际上不需要.
在第二个字段值的末尾添加:
$ paste file1 file2 | awk '{sub(/\t[^ ]* */,"\t")} $NF!=$(NF-1)'
200. 616te yoga
7373qq 8371gd