我有一个看起来像这样的文本文件......
91 bytes (91 B) copied, 0.0127056 s, 7.2 kB/s
91 bytes (91 B) copied, 0.00295891 s, 30.8 kB/s
91 bytes (91 B) copied, 0.0146195 s, 6.2 kB/s
91 bytes (91 B) copied, 0.029734 s, 3.1 kB/
91 bytes (91 B) copied, 0.0641979 s, 1.4 kB/s
我想要做的是运行测试以确保所有值' xx字节'是相同的。 我需要知道如何指定数字' xx'因为这是一个未确定的数字。我已经可以用" set"命令,但我想确保该值是一个在字符串" bytes"之前的数字。
提前致谢
答案 0 :(得分:3)
awk '{a[$1]}END{print length(a)==1?"YES":"NO"}' file
根据您的输入示例,它会打印"YES"
,如果您更改某个数字,例如91 bytes -> 92 bytes
,则会打印"NO"
答案 1 :(得分:1)
如果awk解决方案没问题,那么你可以这样做:
awk '{if( $1==$1+0 && $2 == "bytes" ) a[$1]++;} \
END{ if(a[$1] != NR) print "fail"; \
else print "pass"}' file
$1==$1+0
- 确保第一列是数字
$2 == "bytes"
- 第二列是"字节"。
a[$1] != NR
- 确保记录数与处理的行数相匹配。
答案 2 :(得分:0)
Awk可能是要走的路,但这是另一个解决方案:
if (( $(grep -Po "^\d+(?= bytes)" file | uniq | wc -l) <= 1 )); then
echo 'yes'
else
echo 'no'
fi
<=
用于在空文件的情况下打印yes
。如果您将其计为==
,请随意使用no
。
答案 3 :(得分:0)
sort -u,防止列表中出现重复值。
因此,如果所有值都是等于,则应返回单行。
if [ `cat my_file | awk '{if ($2 == "bytes") print $1}' | sort -u | wc -l` -eq 1 ]; then
echo "Yes"
else
echo "No"
fi