2014-07-07 49 views
0

我有以下輸出AWK與製表作爲定界符

[email protected]# adsl info --state|grep "Upstream rate" 
Max: Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps 
Bearer: 0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps 

在上述輸出的製表存在於

[email protected]# adsl info --state|grep "Upstream rate" 
Max:<TAB>Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps 
Bearer:<TAB>0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps 

我想分析與AWK上述輸出。在定界符是否製表和,

所以,我想

adsl info --state|grep "Upstream rate"| awk -F'[ ,]' '{ print $1}' 

但它返回

Max: Upstream 
Bearer: 0 

即使

adsl info --state|grep "Upstream rate"| awk -F'[\t,]' '{ print $1}' 

回報

Max: Ups 
Bearer: 0 

我預計:

Max: 
Bearer: 

我想我要補充製表符在-F選項。怎麼做?

+0

一個簡單的'awk'{print $ 1}''將完成這項工作。 –

+0

當你說'delimeters是製表符,'你的意思是一個字符串是一個選項卡後面或之前是逗號是分隔符,還是你的意思是選項卡或逗號是分隔符還是別的?如果您發佈的輸入版本中的製表符替換爲「」或其他要澄清的內容,它會對您有所幫助。 –

+0

@AvinashRaj print $ 1只是我想解析其他字段的一個例子 – MOHAMED

回答

4

如果輸入是因爲你已經告訴我們,在每行一個製表符的第一個空格,這是你會什麼製表或逗號分隔的字段:

$ awk -F'[\t,]' '{print "$0 =",$0; for (i=1;i<=NF;i++) print "\t$"i,"=",$i}' file 
$0 = Max:  Upstream rate = 1120 Kbps, Downstream rate = 8948 Kbps 
     $1 = Max: 
     $2 = Upstream rate = 1120 Kbps 
     $3 = Downstream rate = 8948 Kbps 
$0 = Bearer: 0, Upstream rate = 1021 Kbps, Downstream rate = 4095 Kbps 
     $1 = Bearer: 
     $2 = 0 
     $3 = Upstream rate = 1021 Kbps 
     $4 = Downstream rate = 4095 Kbps 

運行在你的輸入上面的命令併發布結果。您輸入的替代方式並非如您所說的那樣,您FS中的\t正在被視爲純粹的t。我無法想象會是什麼原因造成的(除非你在ssh下運行所有​​這些或者在awk之前解釋反斜槓?),但是你需要找出哪些問題需要改進並運行上面的命令以及您輸入的cat -v將確切地告訴您問題是什麼。

我想知道你的awk是否壞了,因爲你從忙碌的工具箱中獲得工具,我不知道他們的awk支持什麼。試試這個:

$ awk -F'['$'\t'',]' '{print "$0 =",$0; for (i=1;i<=NF;i++) print "\t$" i, "=", $i}' file 

它會在FS中使用一個字面標籤字符 - 也許這會有所作爲。

+0

我的貓是有限的,它是從繁忙的框中它不包含-v選項 – MOHAMED

+0

嘗試'catv'而不是'cat -v'。 –

+0

命令catv不存在 – MOHAMED