Bash 检查数组或任何给定文本文件中的相等值的优雅方法
您好,我对脚本编写相当陌生,正在努力测试/检查文本文件中的4行是否彼此相等,我无法理解这一行,因为比较示例都有两个变量。我想到了这个: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
#!/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时执行;做完成