我在寫腳本,我需要創建一個循環,它將執行相同的命令,直到文件包含指定數量的重複條目。例如,在每個循環中,我會將隨機字符串回顯到文件results
。當有10行相同的字符串時,我想循環停止。Bash循環命令,直到文件包含n個重複條目(行)
我想到了什麼樣
而[`這裏的一些命令(可能使用的uniq)`-lt 10]
做
命令1
命令2
命令3
做
你有什麼想法如何解決這個問題?使用grep無法完成,因爲我不知道需要查找哪個字符串。
謝謝您的建議。
我在寫腳本,我需要創建一個循環,它將執行相同的命令,直到文件包含指定數量的重複條目。例如,在每個循環中,我會將隨機字符串回顯到文件results
。當有10行相同的字符串時,我想循環停止。Bash循環命令,直到文件包含n個重複條目(行)
我想到了什麼樣
而[`這裏的一些命令(可能使用的uniq)`-lt 10]
做
命令1
命令2
命令3
做
你有什麼想法如何解決這個問題?使用grep無法完成,因爲我不知道需要查找哪個字符串。
謝謝您的建議。
不是最有效的解決方案,但這應該工作:
while [ `sort $file | uniq -c | awk '{print $1}' | sort -nr | head -n1` -lt 10 ]
while [ `sort filename | uniq -c | sort -nr | head -1 | sed -e 's:^ *::' -e 's: .*::'` -lt 10 ]
效率不高(「sort -nr | head -1」位特別次優),但這是標準的「快速和骯髒」解決方案。
這裏的另一個版本,你做一個(G)的awk進程中。也可以嘗試使用$()
語法儘可能
while [ "$(gawk '{!_[$0]++}END{b=asort(_,a);print a[b]}' file)" -lt 10 ]
我會用關聯數組在AWK或擊4,避免運行兩次排序uniq的加和頭部。
無論何時將值寫入文件,都會增加該數組元素。
#!/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
謝謝!完美無瑕地工作。 – Gargauth 2010-03-19 02:21:52