bash - 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
解决方案
使用一个 awk 命令解析未排序的文件:
awk '++seen[$0]==6' file
它将每出现 6 次或更多的行打印一次。
推荐阅读
- r - R根据CSV中的标准选择工作目录中的文件
- node.js - while 循环如何与 Nodejs 中的 promise 和回调函数一起工作?
- node.js - 我如何将 module.export 导入到我的主代码中,因为它不像函数并且不返回任何变量?
- javascript - 如何从选择菜单中选择文本选项
- angular - 在 Angular 中显示当前工作日日期
- .htaccess - 为什么在请求文本文件时出现 Not Found 错误
- java - Maven 构建成功,但在目标文件夹中没有结果
- r - 如何从 R 中 Shiny 中的反应式表达式访问变量
- html - 如何使图像显示在文本的正下方,而不是在下一个 div 内容的后面?
- pine-script - 使用多个数组元素为相同的符号生成多行(Pine 脚本)