indexes.outというファイルがあります。
indexes.out ファイルには次のコンテンツがあります。
informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5
書式を維持しながら、一度に1つずつ各行を取得できるforループを作成したいと思います。次のforループコマンドを使用しています。
for i in `
cat indexes.out`
do
echo "$i"
done
出力は次のとおりです
informix
abc_aseld_idx1
informix
abc_aseld_idx2
informix
abc_aseld_idx3
informix
abc_aseld_idx4
informix
abc_aseld_idx5
informix
後で awk $1 と $2 を使用してループの 2 つの列を処理したいので、ファイルと同じ出力を見たいと思います。
informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5
ループ内に入ると、各行を使用して特定の列を個別にフィルタリングしたいと思います。
答え1
デフォルトではfor
、-loopは行ではなく単語を繰り返します!
通常、ループは必要ありません。awk
これを使用してファイル行を繰り返すことができます。
awk '{print $1,$2 ;}' indexes.out
シェルでデータ処理を続行するには、ループを使用してwhile
次のことを実行できますread
。
while read a b; do echo "$a $b"; done < indexes.out
他の用途を参照してくださいこの関連質問。
答え2
私に合った解決策を見つけました。
ファイルにスペースを使用する代わりに、次のように区切り記号パイプ(|)を使用します。
informix|abc_aseld_idx1
informix|abc_aseld_idx2
informix|abc_aseld_idx3
informix|abc_aseld_idx4
informix|abc_aseld_idx5
ループ内にある場合は、パイプを次の間隔で交換できます。
for i in `cat indexes.out`
do
echo "$i" | sed 's/|/ /g
done
出力は次のとおりです
informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5