Я делаю проблему короче. На самом деле у меня есть данные гораздо дольше, чем это.
У меня есть файл вроде:
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