在每一行中找到重复的模式和重复次数?

时间:2018-06-18 10:17:54

标签: bash shell unix

我想在unix平台上实现它。 shell,tcsh或csh将是有利的。 假设我输入数据如下: -

a abc abc acd abc
b qwe qre wet dfe
c rte wet dfr wet
d tyr fre wer wty

和我想要的输出如下: -

3 abc
0
2 wet
0

3 个答案:

答案 0 :(得分:0)

你可以试试这个:

cut -d' ' -f2- yourFile | while read line; do
    echo "$line" | tr ' ' '\n' | sort | uniq -c | grep -v '^ *1' || echo 0;
done | sed 's/^ *//'

我们的想法是将空间转换为换行符,以便uniq等可用于将每一行分析为一系列行。

答案 1 :(得分:0)

您可以使用此awk

awk '{
   for (i=1; i<=NF; i++)
      ++freq[$i]
   s = ""
   for (i in freq)
      if (freq[i] > 1)
         s = s freq[i] OFS i ORS
   printf "%s", (s == "" ? "0" ORS : s)
   delete freq
}' file

3 abc
0
2 wet
0

答案 2 :(得分:0)

我使用这样的东西:

cat file.txt | while read line; do echo $line | tr " " "\n" | sort | uniq -c | sort -k2nr | awk 'END{print}'| awk '{ if ($1 == 1) print 0; else print $1, $2}'  ; done

使用awk我可以为输出制作更多条件。