对文件中每行的唯一元素进行计数



假设我有一个文件,每行有5个元素。

$ cat myfile.txt
e1 e2 e3 e4 e5
e1 e1 e2 e2 e1
e1 e1 e4 e4 e4

对于每一行,我想执行以下命令来计算每一行上的唯一元素

tr \t \n | sort -u | wc 

我搞不懂命令的第一部分——有人能帮我吗?

免责声明:该文件看起来确实如下图所示,但我使用xargs-L5来获得第一部分所示的输出。

e1
e2
e3
e4
e5 

给定您的输入文件:

$ cat file
e1 e2 e3 e4 e5
e1 e1 e2 e2 e1
e1 e1 e4 e4 e4

使用awk:的文件中的唯一元素

awk '{for(i=1;i<=NF;i++) a[$i]} END{for (keys in a) print keys}' 
e1
e2
e3
e4
e5

使用grep而不是tr:的文件中的唯一元素

$ grep -Eo 'w+' file | sort -u
e1
e2
e3
e4
e5

文件中每行的唯一元素:

使用awk:

$ awk '{for(i=1;i<=NF;i++) a[$i]; print length(a); delete a}' file
5
2
2

awk解决方案确实是可行的,但使用bash,因为您标记了它:

#!/bin/bash
while read line; do
echo $line | grep -Eo 'w+' | sort -u | wc -l 
done < file

输出:

5
2
2

您可以使用这个:

perl -F -lane '$count{$_}++ for (@F);print scalar values %count;undef %count' your_file

测试如下:

> cat temp
e1 e2 e3 e4 e5
e1 e1 e2 e2 e1
e1 e1 e4 e4 e4
> perl -F -lane '$count{$_}++ for (@F);print scalar values %count;undef %count' temp
5
2
2
>

如果你喜欢的话,这里有一个perl版本:

perl -F's' -pane '%H=map{$_=>1}@F; $_=keys(%H)."n"' myfile.txt

相关内容

  • 没有找到相关文章

最新更新