2011-11-28 39 views
1

使用Windows 7 & gawk 3.1.3(通過UnxUtils)。使用awk將多行文件轉換爲TSV

我希望把這個輸入(利物浦的夾具):

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; 

但儘管多次試圖(通常會導致語法錯誤)無法找出如何剝離出(視窗)行結束並連接那些每三線。

我現在想知道awk實際上是否是正確的工具。

感謝您的指點。

回答

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

應該工作。對於模數爲NR(記錄數)不爲0的每一行,它將打印該行和一個tab字符。否則(輸入)行和換行符。

HTH

+0

完美,謝謝!我正在搞sub()並且無處可去。 –

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 
+0

(在我的Windows 7 PC)這是離開在每行的末尾一個額外的標籤,但它會做的工作一樣好。也謝謝你。 –