【发布时间】:2012-04-05 04:10:48
【问题描述】:
我把问题缩短了。实际上我的数据比这长得多。
我有一个类似的文件:
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 中:
pp, qq, rr, ss, tt, 2
aa, bb, cc, dd, ee, 2
在 t3.txt 中:
kk, ll, mm, nn, oo, 3
在 t4.txt 中:
aa, bb, cc, dd, ee, 4
在 t5.txt 中:
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
【问题讨论】:
标签: regex for-loop awk redirect