bash:嵌套循环以一种方式比较



我有一个关于带有bash的嵌套环。

我有一个输入文件,每行只有一个文件名(完整路径)我读了此文件,然后做一个巢循环:

    for i in $filelines ; do
    echo $i
    for j in $filelines ; do
         ./program $i $j
    done
done

循环中的程序I非常低。基本上它将文件A与文件b。

进行比较

我想跳过一个比较(即比较一个文件与utslef)和我想避免置换(即,对于文件A和B,仅对B进行A,而不是对A进行A)。

执行此操作的最简单是什么?

版本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

这里做了什么:

  • 我使用时循环读取每一行,两次,我和j
  • 如果线的价值相同,请忘记它们,没有用来考虑它们
  • 如果它们不同,请将它们输出到文件中($ tmpunsorted)。然后,它们按字母顺序排序,然后再进行$ tmpunsorted文件。这样,论点总是以相同的顺序为单位。因此, a bb a在未分类的文件中相同。
  • i然后将sort | uniq应用于$ tmpunsorted,因此结果是单个参数对的列表。
  • 最终在$ tmpsort的文件上循环,然后在每个单独的一对上调用程序。
  • 由于我没有您的程序,所以我进行了一个回声,您应该删除使用脚本。

最新更新