对文件进行排序并加入

对文件进行排序并加入

我有两个文件。我想对文件进行排序并加入第一列。例如:

第一个文件:

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

相关内容