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
,第二个替换计数和第一个数据列之间的空白。