Bash:嵌套循环单向比较

Bash:嵌套循环单向比较,bash,loops,nested,triangular,oneway,Bash,Loops,Nested,Triangular,Oneway,我有一个关于bash嵌套循环的问题 我有一个输入文件,每行完整路径有一个文件名 我读了这个文件,然后做了一个嵌套循环: for i in $filelines ; do echo $i for j in $filelines ; do ./program $i $j done done 循环中的程序I非常低。 基本上,它比较文件A和文件B 我想跳过vs比较,即将一个文件与其lef和 我希望避免排列,即对于文件A和B,只针对B执行A,而不是针对A

我有一个关于bash嵌套循环的问题

我有一个输入文件,每行完整路径有一个文件名 我读了这个文件,然后做了一个嵌套循环:

    for i in $filelines ; do
    echo $i
    for j in $filelines ; do
         ./program $i $j
    done
done
循环中的程序I非常低。 基本上,它比较文件A和文件B

我想跳过vs比较,即将一个文件与其lef和 我希望避免排列,即对于文件A和B,只针对B执行A,而不是针对A执行B


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

版本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
这里要做的是:

我使用while循环读取每一行,两次,I和j 如果线条的值是相同的,忘记它们,不用考虑它们。 如果它们不同,则将它们输出到文件$tmpunsorded中。在转到$tmpunsorded文件之前,它们按alphebetic顺序进行排序。这样,参数的顺序总是相同的。所以在未排序的文件中a和b是相同的。 然后,我对$tmpunsorded应用sort | uniq,因此结果是单个参数对的列表。 最后循环$tmpsorted文件,并对每一对调用程序。 由于我没有你的程序,我做了一个echo,你应该删除它才能使用脚本。
比较文件名,如果不同,则运行./program。使用if语句比较$i和$j的值。tje程序是对这些文件中的内容的比较是的,但我建议比较文件名$i和$j值是文件名。所以如果你做一个if来比较它们,你就会知道它是否是同一个文件。好吧,我删除了我的答案,我没有正确阅读,你也需要排列。对不起,是的,我考虑过了,但它只解决了简单的A对A的情况,我想避免重复比较A对B和B对A太好了!我已经稍微修改了代码以满足我的需要。它工作得很好。