我的文件中有一组数据:
AAAPOL.0001
AAAPOL.0002
AAAPRO.0001
AAAPRO.0002
AAAPRO.0003
AAAPRO.0004
AAAXEL.0002
AAAJOK.1111
AAAJOK.2222
我只需要使用前 6 个字符的模式第一次出现,因此我需要知道如何检查仅与前 6 个字符匹配的重复/唯一性。
该命令应从上面的数据返回:
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111
我无权访问该uniq -w
选项。
答案1
如果您不介意更改行的顺序,则可以将sort -u
排序键设置为前 6 个字符:
sort -u -k 1,1.6
或者到 之前的部分.
:
sort -t . -u -k 1,1
答案2
使用 awk
在您的示例中,前六个字符后跟一个句点。如果这总是正确的,那么:
$ awk -F. '!c[$1]++' File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111
这是通过用作.
字段分隔符并跟踪第一个字段已经出现的次数来实现的。
如果情况并非如此,那么:
$ awk '!c[substr($0, 1, 6)]++' File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111
substr($0, 1, 6)
是该行的前六个字符。关联数组c
记录我们看到前六个字符的次数。因此,如果c[substr($0, 1, 6)]
不为零,则我们已经看到了这些字符,并且不应打印该行。在 awk 中,非零表示 true。因此,我们用以下方法反转测试!
:这意味着!c[substr($0, 1, 6)]
如果这六个字符具有不是以前见过。在我们读取下一行之前,尾随++
会更新计数。c
使用uniq
对于那些与OP不同,可以访问uniq
带有该-w
选项的版本的人来说,供参考,然后:
$ uniq -w6 File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111