2009-10-15 36 views
2

我有一個日誌文件,我用awk提取所需的列線的一部分。我的命令是僅獲得使用AWK

awk '{ print $2" "$5" " $6}' log.txt 

的$ 5列包含服務器名稱和格式可以像@:server1的@:@:@:,服務器2 @:@:@:@:@:,@:@:用的Server3沒有固定數量的@:符號。

如何修改我的發言讓我刪除所有的「@:」從列5只得到服務器的名字嗎?

+0

你在另一個說,在一個地方「$ 5列」和「列3」 - 有我們誤解,你需要執行代換? – Cascabel 2009-10-15 14:59:09

+0

是一個錯字。固定它 – randomThought 2009-10-15 15:00:18

回答

3

可以使用gensub功能。

awk '{ print $2, gensub(/@:/, "", "g", $5), $6}' log.txt 

編輯:請參閱下面的glenn jackman的評論,以瞭解可能的可移植性影響。

+1

是'gensub()'只在GAWK? 'GSUB(/ @:/, 「」,$ 5)'是 「便攜式」 – 2009-10-15 17:56:24

+0

哎喲,你可能是正確的。 – 2009-10-15 18:55:21

0

我建議是這樣的:

awk '{ sub("^(@:)*","",$5); sub("(@:)*$","",$5); print $2" "$5" "$6 }' 

注意,你也可以寫print $2,$5,$6 - 的「」由輸出域分隔符,默認情況下空格代替。

(編輯刪除「@:」從字符串的結尾一樣)