Bash循环命令,直到文件包含n个重复条目(行)
我正在编写一个脚本,需要创建一个循环来执行相同的命令,直到文件包含指定数量的重复条目。例如,对于每个循环,我都会将随机字符串回送到文件Bash循环命令,直到文件包含n个重复条目(行),bash,duplicates,Bash,Duplicates,我正在编写一个脚本,需要创建一个循环来执行相同的命令,直到文件包含指定数量的重复条目。例如,对于每个循环,我都会将随机字符串回送到文件结果。当有10行相同的字符串时,我希望循环停止 我想到了类似的事情 而[`some command here(可能使用uniq)`-lt 10] 做 命令1 命令2 命令3 完成 你知道如何解决这个问题吗?无法使用grep,因为我不知道需要查找什么字符串 谢谢你的建议 while [ `sort filename | uniq -c | sort -nr | he
结果
。当有10行相同的字符串时,我希望循环停止
我想到了类似的事情
而[`some command here(可能使用uniq)`-lt 10]做
命令1
命令2
命令3
完成 你知道如何解决这个问题吗?无法使用grep,因为我不知道需要查找什么字符串 谢谢你的建议
while [ `sort filename | uniq -c | sort -nr | head -1 | sed -e 's:^ *::' -e 's: .*::'` -lt 10 ]
效率不高(“sort-nr | head-1”位特别次优),但这是标准的“快速脏”解决方案
效率不太高(“sort-nr | head-1”位特别次优),但这是标准的“快速脏”解决方案。不是最有效的解决方案,但应该可以:
while [ `sort $file | uniq -c | awk '{print $1}' | sort -nr | head -n1` -lt 10 ]
这不是最有效的解决方案,但应该可以:
while [ `sort $file | uniq -c | awk '{print $1}' | sort -nr | head -n1` -lt 10 ]
这里是另一个版本,您可以在一个(g)awk进程中完成它。同时尽量使用
$()
语法
while [ "$(gawk '{!_[$0]++}END{b=asort(_,a);print a[b]}' file)" -lt 10 ]
这里是另一个版本,您可以在一个(g)awk进程中完成它。同时尽量使用
$()
语法
while [ "$(gawk '{!_[$0]++}END{b=asort(_,a);print a[b]}' file)" -lt 10 ]
我会在awk或Bash4中使用关联数组,并避免运行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
我会在awk或Bash4中使用关联数组,并避免运行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