检查数组或任何给定文本文件中的相等值的优雅方法

时间:2014-01-03 12:04:38

标签: bash

你好,我对脚本很新,并且努力尝试测试/检查文本文件中的4行是否相等,并且由于比较示例都有两个变量,我无法弄清楚这一行。我想出了这个:

#!/bin/sh
#check if mxf videofiles are older than 10 minutes and parse them into tclist.txt
find . -amin +10 |sed "s/^..//" >tclist.txt
#grep timecode and cut : from the output of mxfprobe and place that into variable TC
for z in $(cat tclist.txt); do TC=$(mxfprobe -i "$z" 2>&1 |grep timecode|sed "s/[^0-9]*//"|sed "s/://"|sed "s/://"|sed "s/://")
echo $TC >>offsetcheck.txt
done;

offsetcheck.txt的输出如下所示:

10194013 10194013 10194014 10194014

我如何测试这4个值是否相等? (在这个例子中,两个文件漂移一帧)

我试图将这些值放入数组并检查它们的唯一性......

exec 10<&0
exec < offsetcheck.txt
let count=0
while read LINE; do
     ARRAY[$count]=$LINE
     ((count++))
done
echo ${ARRAY[@]}
exec 0<&10 10<&-
if ($ARRAY !== array_unique($ARRAY))
{
  echo There were duplicate values
}

2 个答案:

答案 0 :(得分:1)

  

...努力尝试测试/检查文本文件中是否有4行   等于彼此

您可以使用sortwc来确定文件中唯一值的数量。以下内容将告诉文件是否包含唯一值:

(( $(sort -u offsetcheck.txt | wc -l) == 1 )) && echo "File contains unique values" || echo "File does not contain unique values"

如果你想为数组做同样的事情,你可以说:

for i in "${ARRAY[@]}"; do echo "$i" ; done | sort -u | wc -l

获取数组中唯一值的数量。

如果数组中的值保证没有任何空格,那么说:

echo "${ARRAY[@]}" | tr ' ' '\n' | sort -u | wc -l

就足够了。 (但请注意上面的如果。)

答案 1 :(得分:0)

在我看来,整个过程可以简化为

n=$(
    find . -amin +10 | 
    sed "s/^..//" | 
    xargs -I FILE mxfprobe -i "FILE" 2>&1 |
    grep -h timecode | 
    sed 's/[^0-9]//g' | 
    sort -u | 
    wc -l
)

然后检查是否n == 1