首页 > 解决方案 > 比较第一个以 ; 结尾的字符串 在 2 个 txt 文件中,只获取那些唯一的行

问题描述

我正在尝试比较 2 个 txt 文件并仅获取那些唯一的行,问题是行只想根据 1 个以符号结尾的单词进行比较;因为这正是我感兴趣的

这是示例行:

000000423B;Name;26.46;32.55;0;06;pc.

我需要找出文本文件是否也是000000423B,如果它不显示或保存到文件中

awk 'NR == FNR {exclude [$ 0]; next}! ($ 0 in exclude)' 1.txt 2.txt
and
grep -xvFf 1.txt 2.txt> 3.txt

他们给出了很好的结果,但他们比较了整行,我只需要比较第一个字符;

任何的想法?

我的意见

1.txt:
000000423B;Name;27.47;33.79;0;06;szt.
000010001;Name2;4.42;5.44;0;08;szt.
000010001D;Name3;1.68;2.06;0;06;szt.
2.txt
000000423B;Name;97.47;33.79;0;06;szt.
000010001;Name2;4.99;5.44;0;08;szt.
000010001D;Name3:8778;1.68;2.06;0;06;szt.
009999999;Name4:99999;1.68;2.06;0;96;szt.

我想得到结果:

009999999;Name4:99999;1.68;2.06;0;96;szt.

在 1.txt 和 2.txt 中,前三行具有相同的“产品 ID”,但价格不同,我不在乎。我只需要找到新的“产品 ID”,这些是字符“;”的第一个数字

标签: bashsortingunixawk

解决方案


要修复您的命令并使其仅适用于第一列,您可以执行以下操作:

awk -F';' 'NR == FNR {exclude [$1]; next} !($1 in exclude)' 1.txt 2.txt

推荐阅读