Shell:条件に2つの変数を使用する方法

Shell:条件に2つの変数を使用する方法

for条件には2つの変数を使用する必要があります。例えば、

cat days
01072017
02072017
03072017

cat hours
00:00
01:00
02:00
03:00

私のシェルスクリプトの例

 for i in `cat days` & j in `cat hours`
    do
    cat file | grep $i $j >data-$i-$j
    done

3日* 4時間= 12個のファイルの出力を希望し、対応するデータ-日-時間にリダイレクトします。

答え1

このタイプの問題に対する標準的な解決策は、2つのループを作成することです。

for i in $(<days); do
     for j in $(<hours); do
           grep "$i $j" file > data-"$i-$j"
     done
done

コマンドを置き換えるためにバックティックを変更し、デッド$()キャットを削除し、二重引用符を追加しました。

答え2

入れ子になった for ループを使用する必要があります。

   for i in `cat days` 
      do 
        for j in `cat hours`
        do
        cat file | grep  "$i $j"  >data-${i}-${j}
      done
    done

答え3

この 1 行コマンドを使用してマルチループを実行できます。たとえば、異なるサービスパラメータを使用して別のホストでサービスを再起動する必要があります。 「私」ホストIDと「ジェイ」サービス名パラメータの場合

for i in 1 2 3 4;do  ssh host$i 'for j in A B C D; do sudo systemctl restart service_$j; done'; done

メモ:あなたは変わらなければなりません「私」そして「ジェイ」値が要件と一致します。

関連情報