使用awk将多行文件转换为TSV

时间:2011-11-28 12:15:39

标签: windows string text awk

使用的是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 个答案:

答案 0 :(得分:2)

见下面的测试:

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

答案 1 :(得分:2)

awk '(NR % 3) > 0 {printf("%s\t",$0)}
     (Nr % 3) == 0 {printf("%s\n",$0)}

应该有效。对于NR(记录数)的模数不为0的每一行,它将打印该行和tab字符。否则是(输入)行和换行符。

HTH