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

Bash 检查数组或任何给定文本文件中的相等值的优雅方法,bash,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

您好,我对脚本编写相当陌生,正在努力测试/检查文本文件中的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
}
exec 10
。。。努力测试/检查文本文件中的4行是否正确
相等

您可以使用
sort
wc
来确定文件中唯一值的数量。下面将说明文件是否包含唯一值:

(( $(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

就够了。(但请注意上面的if。)

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

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

注意:您可以将
|sed“s/[^0-9]*/“|sed”s/://“|sed”s/://“| sed”s/://“
替换为
|sed's/[^0-9]//g'
在$(cat tclist.txt)中不执行
改为读取z时执行
;做完成