在文本文件中查找未确定的数值

时间:2014-06-21 22:49:34

标签: linux bash set

我有一个看起来像这样的文本文件......

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"之前的数字。

提前致谢

4 个答案:

答案 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