2013-02-13 55 views
2

我試圖將使用awk命令的值分割爲三部分。需要幫助打入3使用awk將單行分割爲多行使用awk編碼格式

內容= 1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %

我希望以上內容闖入編號系統3條線。

樣本輸出要求:

1. 11683 (<server01>: du.size[/,free] : 0.5 % 
2. 21683 (<server02>: du.size[/,free] : 1.5 % 
3. 31683 (<server03>: du.size[/,free] : 3.5 % 

我已經通過下面的命令嘗試:

echo $content | awk -F"3. " '{ print $2 }' 

,我也得到

31683 (<server03>: du.size[/,free] : 3.5 % 

同樣,對於別人,但還是未能獲得樣本以正確的編號格式輸出,如上所示。

任何人都可以幫助我嗎?

回答

4

你可以使用sed代替:

sed "s#[^^]\([0-9]\.\) #\n\1 #g" 

例子:

[~/Desktop] 
==> echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | sed "s#[^^]\([0-9] 
\.\) #\n\1 #g" 
1. 11683 (<server01>: du.size[/,free] : 0.5 % 
2. 21683 (<server02>: du.size[/,free] : 1.5 % 
3. 31683 (<server03>: du.size[/,free] : 3.5 % 
+0

非常感謝......它的工作原理:-) – San 2013-02-13 06:07:14

+3

你能不能解釋一下這個命令,它paramers呢? – 2014-12-11 18:31:39

1

嘗試

echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | awk '{n = split($0,array,"%"); for (i = 0; i < n-1; ++i){gsub("^ ","",array[i+1]);print array[i+1]" %",i}}' 
+0

最後兩行的不必要的前導空白看起來像最後兩個是第一個的子行.. – San 2013-02-15 05:27:19

+0

感謝您指出,我沒有真正測試我的代碼。我已經做出了改變,現在它工作正常 – 2013-02-15 05:59:05

4

%符號看起來像一個很好的候選分割上。嘗試:

sed 's/% /%\n/g' 

測試:

echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | sed 's/% /%\n/g' 

結果:

1. 11683 (<server01>: du.size[/,free] : 0.5 % 
2. 21683 (<server02>: du.size[/,free] : 1.5 % 
3. 31683 (<server03>: du.size[/,free] : 3.5 % 
+0

你的答案完美無缺:-)謝謝。 – San 2013-02-15 05:28:02

+0

@San:如果這是你要找的東西,別忘了接受它。乾杯。 – Steve 2013-02-15 06:07:26

1

資料就會顯示在固定的元素個數。

{ 
    print $1, $2, $3, $4, $5, $6, $7 
    print $8, $9, $10, $11, $12, $13, $14 
    print $15, $16, $17, $18, $19, $20, $21 
} 

很有用的,如果你必須做任何事情與打印它以外的其他數據。

3
perl -pe 's/(\d+\.\s)/\n$1/g' 

測試:

> echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | perl -pe 's/(\d+\.\s)/\n$1/g' 

1. 11683 (<server01>: du.size[/,free] : 0.5 % 
2. 21683 (<server02>: du.size[/,free] : 1.5 % 
3. 31683 (<server03>: du.size[/,free] : 3.5 % 
+1

這適用於Mac電腦,其中sed將\ n和n視爲同一件事。 – 2016-09-29 23:04:07