使用的是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是否真的是适合这项工作的工具。
感谢您的任何指示。
答案 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