forループのcatファイルは、ループの1行にデータ型を保持します。

forループのcatファイルは、ループの1行にデータ型を保持します。

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

関連情報