как использовать индекс awk для цикла в регулярном выражении - PullRequest
4 голосов
/ 20 марта 2012

Я делаю проблему короче. На самом деле у меня есть данные гораздо дольше, чем это.

У меня есть файл вроде:

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

Ответы [ 2 ]

5 голосов
/ 20 марта 2012

Попробуйте с помощью следующей команды:

awk '{ print $0 > ("t" $NF ".txt") }' infile

Нет необходимости изменять FS, поскольку по умолчанию используются пробелы.И вы можете немедленно получить доступ к последнему полю с помощью переменной NF.

NB: конкатенация строк имени файла должна быть заключена в скобки, в противном случае awk может запутаться из-за неправильного синтаксиса.

0 голосов
/ 22 марта 2012

Я получил ответ, со следующим он работает: но любое дальнейшее объяснение будет приветствоваться.

BEGIN   {FS=","}
        {
        for (n=1; n<=5; n++)
        if ($6 ~/\$n/) {print > "new"$n".txt"}
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...