2009-09-28 49 views
1

我正在寫一個awk腳本,它將把grep的輸出和很好的格式轉換成HTML表格。分隔符是「:」字符;我遇到的問題是該字符也可以出現在文本中。因此,如果我分別使用$ 1,$ 2和$ 3作爲文件名,行號和註釋,我會在第一個之後丟失任何內容:評論提取沒有循環的多列

有沒有辦法說$ 1,$ 2,然後是$ 3。 .NR沒有顯式循環遍歷列並將它們連接在一起?

這裏的腳本至今:

`

#!/usr/bin/awk 

BEGIN { 
    FS=":" 

    print "<html><body>" 
    print "<table>" 
    print "<tr><td>File name</td><td>Line number</td><td>Comment</td></tr>" 
} 

{ 
    print "<tr><td>" $1 "</td><td>" $2 "</td><td>" $3 "</td></tr>" 
} 
END { 
    print "</table>" 
    print "</body></html>" 

}` 

和一些示例輸入:

./mysql-connector-java-5.0.8/src/com/mysql/jdbc/BlobFromLocator.java:177:  // TODO: Make fetch size configurable 
./mysql-connector-java-5.0.8/src/com/mysql/jdbc/CallableStatement.java:243:  // TODO Auto-generated method stub 
./mysql-connector-java-5.0.8/src/com/mysql/jdbc/CallableStatement.java:836:  // TODO: Do this with less memory allocation 

回答

1

BEGIN {FS = 「:」; OFS =「:」} {name = $ 1;數= $ 2; $ 1 = 「」; $ 2 = 「」;註釋= SUBSTR($ 0.3); }

+0

這很聰明。但是你必須在真正的Unix系統或者BSD上,因爲我認爲你只需要它。 'BEGIN {FS =「:」; 「甚至在oawk爲什麼設置OFS? – DigitalRoss 2009-09-28 15:27:49

+0

我一開始嘗試不修改OFS,但列已更改爲註釋字段中的空格。 – ffx 2009-09-28 21:36:02

1
{ print gensub(/^[^:]*:[^:]*:/,"","g") } 
+0

如果您通過命令行選項'--re-interval'使用awk,您可以使用'/ ^([^:] *:){2} /'。當你有更多的字段需要刪除時,可讀性更高。 – 2009-09-28 12:34:43

+0

你的意思是,「如果你使用'gawk' ...」 – 2009-09-28 12:35:53

+0

是的,我的意思是'gawk'。 ('awk'通常是'gawk'的符號鏈接。) – 2009-09-28 12:38:51