首页 > 解决方案 > N次重复后脚本导出重复项

问题描述

编写 bash 脚本并遇到小问题,所以我在 Log.txt 文件中编写可重复的文件:

20201002 105646 000500000475FB8D dummy
20201002 105710 000500000475FB8E dummy1
20201002 105646 000500000475FB8D dummy
20201002 105710 000500000475FB8E dummy1
20201002 105646 000500000475FB8D dummy
20201002 105646 000500000475FB8D dummy
20201002 105646 000500000475FB8D dummy
20201002 105646 000500000475FB8D dummy

并尝试获取重复超过 6 次的行文本信息。

通过排序,我可以看到它,但我遇到的问题很少。如果在前面或行中创建额外的空间

$ sort Log.txt | uniq -cd | sort -nr
      6 20201002 105646 000500000475FB8D dummy
      2 20201002 105710 000500000475FB8E dummy1

我做了类似的事情:

  1 #!/bin/bash
  2 source ~/.bash_profile
  3
  4 
  5 fileLog='Log.txt'
  6
  7
  8 i="0"
  9 lines=`sort $fileLog | uniq -cd | sort -nr |wc -l`
 10 dublines=`sort $fileLog | uniq -cd | sort -nr `
 11
 12 while ($i < "$lines");
 13 do
 14         check=`cat $dublines | awk ""NR==$i"" | cut -d' ' -f'7' `
 15         i=$[$i+1]
 16         if (("$check" >= "6"));
 17                 then
 18                 limited=`cat $dublines | awk ""NR==$i""`
 19                 echo "$limited"
 20         fi
 21 done

我想要得到的结果是这样的:

20201002 105646 000500000475FB8D dummy

但是 bash -x 显示:

+ fileLog=Log.txt
+ i=0
++ uniq -cd
++ sort -nr
++ sort Log.txt
++ wc -l
+ lines=2
++ uniq -cd
++ sort -nr
++ sort Log.txt
+ dublines='      6 20201002 105646 000500000475FB8D dummy
      2 20201002 105710 000500000475FB8E dummy1'
+ 0
script.sh: line 12: 2: No such file or directory

标签: bashawkcount

解决方案


使用一个 awk 命令解析未排序的文件:

awk '++seen[$0]==6' file

它将每出现 6 次或更多的行打印一次。


推荐阅读