問題を短くします。実際、私はこれよりはるかに長いデータを持っています。awk forループのインデックスを正規表現で使用する方法
私のようなファイルがあります:
aa, bb, cc, dd, ee, 4
ff, gg, hh, ii, jj, 5
kk, ll, mm, nn, oo, 3
pp, qq, rr, ss, tt, 2
uu, vv, ww, xx, yy, 5
aa, bb, cc, dd, ee, 2
は今、私は最後の列の同じ番号のそれぞれの行を選択し、新しいファイルにリダイレクトするためにはawkを使用したいが、これらの新しいファイルは、によって異なります最後の列の番号。例えば、 。 t2.txt、t3.txt、t4.txt、t5.txtはそれぞれ最後の数が2,3,4,5の行を保持します。
t2.txtで:t3.txtで
pp, qq, rr, ss, tt, 2
aa, bb, cc, dd, ee, 2
:
t4.txtでkk, ll, mm, nn, oo, 3
:t5.txtで
aa, bb, cc, dd, ee, 4
:
ff, gg, hh, ii, jj, 5
uu, vv, ww, xx, yy, 5
BEGIN {FS=","}
{
for (n=2; n<=5; n++)
if ($6 ~/\$n/) {print > "t\$n.txt"}
}
しかし、私はちょうどそれを動作させる方法がわからない:は、私はこのようなものが必要と思います。
このbashファイルは、私が望むことをしますが、問題は、特定の番号の行を抽出するたびに、すべての行を読み込む必要があることです。ファイルの唯一の時刻をチェックし、すべての番号のファイルを抽出するにはどうすればよいですか?
#!/bin/bash
for num in {2..5}; do
gawk --assign FS="," "\$6 ~/${num}/" infile >> t${num}.txt
done
ファイル名の連結には括弧が必要です。そうしないと、awkは不正な構文のため混乱します。 – andrewdotnich
@andrewdotnich:ありがとう。 'GNU Awk 4.0.0'では括弧なしで動作しましたが、以前のバージョンではそうではなかったかもしれないので、あなたの提案を受け入れました。 – Birei
たぶんそれはうんざりなことです - 私は私のMac上で 'awk'のカップル版を試してみましたが、どちらも不平を言っています... – andrewdotnich