2016-08-04 58 views
1

我想打破一個長字符串的字數,然後繼續顯示並每隔一定數量的字達到中斷一次。bash - 如何打破一個長字符串的字數統計爲多個字符串

例如。

我有一個字符串:

value="Aug 04 03:49:00.082205 ALERT IPX-NG dropped -- total: 4693845, count: 39254, rate: 1.88% ; OUTPUT QUEUE frampedd: active=1, delivered=73265000210 Aug 04 09:43:00.795817 ALERT IPX-NG dropped -- total: 4765909, count: 72064, rate: 1.91% ; OUTPUT QUEUE frampedd: active=0, delivered=74220627600" 

我的預期成果是:

Aug 04 03:49:00.082205 ALERT IPX-NG dropped -- total: 4693845, count: 39254, rate: 1.88% ; OUTPUT QUEUE frampedd: active=1, delivered=73265000210 
Aug 04 09:43:00.795817 ALERT IPX-NG dropped -- total: 4765909, count: 72064, rate: 1.91% ; OUTPUT QUEUE frampedd: active=0, delivered=74220627600" 

我無法用文字使用算作數量會有所不同。所以最好的選擇是使用字數。

編輯:

嗨,大家好,..我試圖用sed命令,它似乎工作!

sed的 'S /([^ [:空間:]] {1,} [[:空間:]] {1,}){19}/& \ N /'

感謝那些誰幫助如果存在以下情況,您可以給我更好的建議:D ..希望純粹的bash命令,因爲我無法在服務器上安裝任何其他擴展。

+0

爲每18萬個字,字符串將打破,併成爲substring..then繼續... 例如: 「03年8月4日:49:00.082205 ALERT IPX的NG下降 - 總計:4693845,計數:39254,比率:1.88%; OUTPUT QUEUE frampedd:active = 1,delivered = 73265000210「 有18個單詞..所以在這18個單詞之後,我想將字符串分解成另一個句子並繼續 –

回答

2

如果所有的字符串計數不改變,你可以使用xargs

$ value="Aug 04 03:49:00.082205 ALERT IPX-NG dropped -- total: 4693845, count: 39254, rate: 1.88% ; OUTPUT QUEUE frampedd: active=1, delivered=73265000210 Aug 04 09:43:00.795817 ALERT IPX-NG dropped -- total: 4765909, count: 72064, rate: 1.91% ; OUTPUT QUEUE frampedd: active=0, delivered=74220627600" 

$ xargs -n 19 <<< "$value" 
Aug 04 03:49:00.082205 ALERT IPX-NG dropped -- total: 4693845, count: 39254, rate: 1.88% ; OUTPUT QUEUE frampedd: active=1, delivered=73265000210 
Aug 04 09:43:00.795817 ALERT IPX-NG dropped -- total: 4765909, count: 72064, rate: 1.91% ; OUTPUT QUEUE frampedd: active=0, delivered=74220627600 

xargs man頁面表示,這對標誌-n

-n max-args, --max-args=max-args 
     Use at most max-args arguments per command line. Fewer than 
     max-args arguments will be used if the size (see the -s 
     option) is exceeded, unless the -x option is given, in which 
     case xargs will exit. 
+1

這是一個很好的方法。通過執行'res =「$ {value // [^]}''來計算數字,然後'$ {#res}'將包含37.這會除去字符串中的所有空格,因此要獲取單詞的數量只需要對結果中的字符進行計數 – fedorqui

+1

注意,如果字符串包含回顯參數,例如如果字符串包含「-n」作爲一個字,它將不會被打印,此命令將無法正常工作 – 123

+1

@ 123:duly注意! – Inian

1

在AWK:

awk '{{gsub(/^value="|"$/,""); for(i=1;i<=NF;i++) printf "%s%s",$i,(i%19?" ":"\n")}' file 

或者您的字符串實際上並不以開頭,您可以鬆gsub

awk '{for(i=1;i<=NF;i++) printf "%s%s",$i,(i%19?" ":"\n")}' file 
+0

而不是硬編碼19,你可以說NF/2 + 1。另外,我認爲它不是用'value =「'盯着字符串,而是一個變量聲明。 – fedorqui

+1

你是對的,但我期望有更多的兩組數據來處理。 –

+0

嗨,我實際上分配了字符串到一個變量名稱「值」..所以當我呼籲..我只是「回聲$值」 –

相關問題