你好,我对脚本很新,并且努力尝试测试/检查文本文件中的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
}
答案 0 :(得分:1)
...努力尝试测试/检查文本文件中是否有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
就足够了。 (但请注意上面的如果。)
答案 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