7

条件付きの複数の列 (フィールド) を持つ多数の行を持つファイルでループを実行しようとしています。

サンプル ファイル ( file.txt) は次のようになります。

aaa  bbb  ccc
ddd  kkk
fff  ggg  hhh lll
ooo
sss

...等...

最初のフィールドの最初の行をループし、名前が存在する場合は 2 行目に続く bash スクリプトを書きたいと思います。最初のフィールドの最初の行の名前が存在しない場合は、次に 2 番目のフィールドをテストし (この場合は "bbb" という名前をテストします)、4 番目まで同様にテストします。特定の行に対して最大 4 つのフィールドと最小 1 つのフィールド (列) を持つ可変フィールド番号があります。

for i in cat file.txt; do 
    echo $i
    if [ -e $i ]; then
        echo "name exists"
    else
        echo "name does not exist"
    fi
done 

明らかに、上記のスクリプトは行と列の両方をテストします。しかし、最初のフィールドが存在しない場合は 2 番目、3 番目、4 番目のフィールドにループし、2 番目のフィールドが存在しない場合は 3 番目のフィールドをテストし、4 番目までループしたいと考えていました。

4

2 に答える 2

13

あなたが本当にやろうとしているのは、単語ごとではなく行ごとにファイルを読むことだと思います。whileと でこれを行うことができますread。お気に入り:

while read field1 field2 field3 field4; do
  if [ -e "$field1" ]; then
     something
  elif [ -e "$field2" ]; then
      ...
  fi
done < file.txt
于 2012-09-07T23:35:02.650 に答える