簡體   English   中英

Bash:嵌套循環單向比較

[英]Bash: nested loop one way comparison

我有一個關於bash嵌套循環的問題。

我有一個輸入文件,每行一個文件名(完整路徑),我讀取此文件,然后進行嵌套循環:

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

我在循環中的程序非常低。 基本上,它將文件A與文件B進行比較。

我想跳過A與A的比較(即,將一個文件與其itslef進行比較),並且想要避免排列(即,對於文件A和B,僅對B執行A,而對B不執行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
  • 如果這些線的值相同,則將其忘記,不要考慮它們
  • 如果它們不同,則將它們輸出到文件($ tmpunsorted)中。 在進入$ tmpunsorted文件之前,它們按字母順序排序。 這樣,參數始終處於相同順序。 因此, abba在未排序的文件中將相同。
  • 然后我應用sort | uniq $ tmpunsorted上的sort | uniq ,因此結果是單個參數對的列表。
  • 最后循環$ tmpsorted文件,並在每個對上調用該程序。
  • 由於我沒有您的程序,因此我做了一個回顯,應刪除該回顯以使用該腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM