如何让`排序| uniq -c` 用制表符分隔出现的次数?

如何让`排序| uniq -c` 用制表符分隔出现的次数?

uniq -c用空格分隔出现的次数,这样以后很难cut分开awk

1000_A1\tB1\n
___1_A2\tB2\n

sed -r 's/^ *([0-9]+)/\1\t/'我可以使用将分隔符更改为制表符来解决此问题。然后cut -f1可以返回:

1000\tA1\tB1\n
1\tA2\tB2\n

uniq -c但用制表符分隔数字似乎是一种常见用法。为什么缺少这个功能?还有其他更简单的方法吗?

答案1

听起来您的格式类似于<number><space><field 1 name><tab><field 2 name>,并且您想检查输入是否按 排序field 1 name。如果这就是您想要的,只需删除初始数字部分并检查第一列剩余部分的排序:

echo "$input" | sed -r 's/^ *[^ ]+ //' | sort -c -k1,1

答案2

我不知道为什么你认为很难awk分开数字。awk '{print $1}'打印没有问题。

$ sort file | uniq -c
      5 x
     10 y
$ sort file | uniq -c | awk '{print $1}'
5
10
$ 

答案3

您可以轻松地使用 cut 将它们分开。只需用于cut -d " " -f 1获取号码并cut -d " " -f 2-获取其余的即可。 awk 只会处理它,因为它是空格。

答案4

如果数据列可以包含空格,您可以使用sed制表符替换空格。

sed -e 's/<5 white space chars>//' | sed -e 's/<1 white space chars>/\t/'

第一个sed替换由 switch 生成的前导空白-c,第二个替换计数和第一个数据列之间的空白。

相关内容