Bash 脚本在N次重复后导出重复项

Bash 脚本在N次重复后导出重复项,bash,awk,count,Bash,Awk,Count,写bash脚本遇到小问题, 因此,我正在Log.txt文件中写入可修复文件: 20201002 105646 000500000475FB8D dummy 20201002 105710 000500000475FB8E dummy1 20201002 105646 000500000475FB8D dummy 20201002 105710 000500000475FB8E dummy1 20201002 105646 000500000475FB8D dummy 20201002 10564

写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
但是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

使用
sort
uniq
awk
的组合:

sort Log.txt |uniq -c|awk '{if ($1 == "6") for(i=2; i<=NF; ++i) printf "%s ", $i;print " "}'

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

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

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

while($i<“$lines”)
更改为
while($i<“$lines”)
,就像代码中的
if(“$check”>=“6”)
一样。不应使用bash循环逐行读取文件,尤其是大型文件。如果您为每一行调用命令,这可能会非常慢。在这里,您为每条生产线提出了许多系统流程。使用一个进程读取整个文件。对于文本处理,使用一个grep、awk、sed、python脚本、perl脚本,不要为每行调用一次,而是为文件调用一次。我已经用这一个解决了我的问题,但是awk“'++seed[$0]==6'file”工作正常
20201002 105646 000500000475FB8D dummy
awk '++seen[$0]==6' file