我有一个关于使用bash嵌套循环的问题。
我有一个输入文件,每行一个文件名(完整路径) 我读了这个文件,然后我做了一个嵌套循环:
for i in $filelines ; do
echo $i
for j in $filelines ; do
./program $i $j
done
done
循环中的程序非常低。 基本上它将文件A与文件B进行比较。
我想跳过A vs A比较(即将一个文件与其文件进行比较)AND 我想避免排列(即对于文件A和B,只针对B执行A而不针对A执行B)。
执行此操作最简单的是什么?
答案 0 :(得分:1)
版本2:此版本负责排列
#!/bin/bash
tmpunsorted="/tmp/compare_unsorted"
tmpsorted="/tmp/compare_sorted"
>$tmpunsorted
while read linei
do
while read linej
do
if [ $linei != $linej ]
then
echo $linei $linej | tr " " "\n" | sort | tr "\n" " " >>$tmpunsorted
echo >>$tmpunsorted
fi
done <filelines
done <filelines
sort $tmpunsorted | uniq > $tmpsorted
while read linecompare
do
echo "./program $linecompare"
done <$tmpsorted
# Cleanup
rm -f $tmpunsorted
rm -f $tmpsorted
这里做了什么:
a b
和b a
在未排序的文件中将相同。sort | uniq
,因此结果是各个参数对的列表。