uniq -t是做什么的?


15

我有一些来自2003年的旧代码,其中使用-tuniq命令选项。由于可能不再支持该选项,因此会引发错误。

这是使用命令的片段:

egrep -n "{ IA32_OP" ia32-decode.c | \
    awk '{ print $1 $3 $4 }' | \
    sort -t '(' +1 | \
    uniq -t ':' -f 1 | \
    sed 's/\(.*\)\:IA32_OP(\(.*\)),/#define IA32_OP_\2 \1/g' >> ia32_opcodes.h

那时候那个选项做了什么?我可以用什么代替该命令?



根据man uniq-f 1避免比较第一个字段。我推断-t ':'-t应该改变从毛坯到外地分隔符:
Martin von Wittich

可能相关:stackoverflow.com/questions/10546337/…也许-t是特定于Debian的选项后来被删除了吗?
Martin von Wittich'2


1
我一直想知道为什么uniq没有相同-t-k排序,或者为什么排序没有uniq合并的所有功能(因为现在有了-u)。那些-w/ -f/ -s从GNU的uniq没有意义。他们为什么不能使用与相同的语法sort
斯特凡Chazelas

Answers:


13

我可以找到的唯一参考-t是在GNU邮件列表中的此补丁中,其中包括以下线索:

+  -t, --separator=S     use a character in string S as field separator\n\

这显然是GNU扩展,但不再使用。似乎允许为空格或制表符以外的字段选择定界字符。尝试更换

uniq -t ':' -f 1 | \

sed 's/:/ /' | \
uniq -f 1 | \

它将替换:为uniq识别字段分隔符的空格。


我将删除gfrom sed,因为仅跳过了第一个字段。最后一行需要至少一个冒号(希望不是第一行)。仍然不能保证它会起作用(任何第一个字段都可能包含空格)
Graeme

@Graeme好点,编辑。
casey 2014年

在Debian中,coreutils 5.2.1确实已应用了这样的补丁,并且显然在5.93-1中将其删除,也就是在2005
。– user2719058 2014年

4

给定选项的man条目-f

-f,--skip-fields = N

         avoid comparing the first N fields

我认为假设-t指定字段分隔符是相当安全的(sort在上一行中也是如此)。这两个选项的组合将使得uniq仅在第一个冒号之后的行的一部分上起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.