我正在编写一个脚本,我需要创建一个循环来执行相同的命令,直到文件包含指定数量的重复条目。例如,对于每个循环,我将随机字符串回显到文件results
。而且当有10行相同的字符串时,我希望循环停止。
我想到了像
这样的东西虽然[`这里有一些命令(也许是使用uniq)`-lt 10] 做
命令1
命令2
指令代码
完成
你知道如何解决这个问题吗?使用grep无法完成,因为我不知道我需要查找什么字符串。
感谢您的建议。
答案 0 :(得分:1)
不是最有效的解决方案,但这应该有效:
while [ `sort $file | uniq -c | awk '{print $1}' | sort -nr | head -n1` -lt 10 ]
答案 1 :(得分:1)
这是另一个版本,您可以在一个(g)awk进程中执行此操作。另请尝试尽可能使用$()
语法
while [ "$(gawk '{!_[$0]++}END{b=asort(_,a);print a[b]}' file)" -lt 10 ]
答案 2 :(得分:1)
我会在awk或Bash 4中使用关联数组,并避免运行sort两次加上uniq和head。
每当您将值写入文件时,请递增该数组元素。
#!/bin/bash
# Bash 4
while true
do
one_command
val=$(command_to_output_val | tee out_file)
if ((array[$val]++ >= 10))
then
break
fi
done
答案 3 :(得分:0)
while [ `sort filename | uniq -c | sort -nr | head -1 | sed -e 's:^ *::' -e 's: .*::'` -lt 10 ]
效率不高(“sort -nr | head -1”位特别不理想),但这是标准的“快速而肮脏”的解决方案。