tcshでファイルを1行ずつ繰り返します。

tcshでファイルを1行ずつ繰り返します。

とても似たような質問です。ファイルの行を繰り返す方法は?

次の行を含むファイルがあります。Nスペースで区切られたフィールド。ファイルを1行ずつ繰り返して、フィールドを他のファイルの情報を呼び出すために使用できる変数に設定したいと思います。

たとえば、私のファイルは次のようになります。

A B C
D E F
H I J
K L M

各行を繰り返し、変数をフィールドに設定したいと思います。

foreach i ( `cat file ` )
set 1st = $i[1]; set 2nd = $i[2]; set 3rd = $i[3]
end

現在、私のシェルはスペースを使用してフィールドを区切っているため、各行に3つの変数を設定することはできません。

echoそれぞれを見ると、$i次のような内容が表示されます。

A
B
C
D
....

新しい行だけを区切り文字として使用してループを制御する方法を知りたいです。

それが私が本当に達成したいものです。 3つの異なる値を含むファイルAの行をgrepしたいと思います。これらの値はすべて、ファイルBの1行にスペースで区切られた要素として表示されます。私の計画は、Bの対応する行にある各要素(スペースで区切られています)に対してファイルBの各行を繰り返し、その3つの要素を使用することです。次に、Bの次の行に対してこの操作を繰り返します。しかし、私のループはファイルBの行を見ることができないので失敗します。スペースで区切られたすべての要素のみが表示され、3つの要素の行にグループ化されていることを認識できません。これが混乱しないことを願っています。

ベストアンサー1

元の質問が十分に明確に渡されたかどうかはわかりませんが、行にスペースで区切られた要素を含むシェル環境でテキストファイルの行を繰り返すのに問題があるようです。

row 1: A B C
row 2: D E F

各行を要素に変換して解決策を見つけ、後でこの質問の範囲外になるように解析できます。だから上記の2行は

row 1: A_B_C
row 2: D_E_F

この形式では、私のforeachループは各行を単一の要素として扱います。最初の反復でBが必要な場合は、次のように使用できます。

foreach i ( `cat <file>` )
foreach? set a = `echo $i | awk -F '_' '{print($2)}'`
foreach? echo $a
foreach? end

次の内容をエコーする必要があります。

B
E

これは私のファイルの各行の2番目の要素になります。

興味のある方に感謝し、よりエレガントな方法があるかどうかを教えてください。

おすすめ記事