Конвертируйте многострочный файл в TSV, используя awk - PullRequest
1 голос
/ 28 ноября 2011

Я использую Windows 7 & gawk 3.1.3 (через UnxUtils).

Я хотел бы превратить этот ввод (светильники «Ливерпуля»):

Sunday, 27 November 2011
Barclays Premier League
Liverpool v Man City, 16:00
Tuesday, 29 November 2011
Carling Cup
Chelsea v Liverpool, QF, 19:45
...

в табуляциюотдельный файл, например:

Sunday, 27 November 2011<tab>Barclays Premier League<tab>Liverpool v Man City, 16:00
Tuesday, 29 November 2011<tab>Carling Cup<tab>Chelsea v Liverpool, QF, 19:45
...

Я пытался сделать это с помощью awk, но пока не получилось.Определить каждую первую и вторую строку достаточно просто:

if (NR % 3 == 1 || NR % 3 == 2) print;

, но, несмотря на многочисленные попытки (обычно приводящие к синтаксическим ошибкам), не удается выяснить, как вырезать (Windows) окончания строк и объединить их скаждая третья строка.

Теперь мне интересно, действительно ли awk - правильный инструмент для работы.

Спасибо за любые указатели.

Ответы [ 2 ]

2 голосов
/ 28 ноября 2011
awk '(NR % 3) > 0 {printf("%s\t",$0)}
     (Nr % 3) == 0 {printf("%s\n",$0)}

Должно работать. Для каждой строки, где модуль NR (количество записей) не равен 0, будет напечатана строка и символ tab. В противном случае (входная) строка и символ новой строки.

НТН

2 голосов
/ 28 ноября 2011

см. Тест ниже:

kent$  echo "Sunday, 27 November 2011
Barclays Premier League
Liverpool v Man City, 16:00
Tuesday, 29 November 2011
Carling Cup
Chelsea v Liverpool, QF, 19:45
"|awk '{printf $0"\t";if(!(NR%3))print""}'

выход:

Sunday, 27 November 2011        Barclays Premier League Liverpool v Man City, 16:00
Tuesday, 29 November 2011       Carling Cup     Chelsea v Liverpool, QF, 19:45
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...