2015-03-31 50 views
1

我想轉換:如何以字/字符分隔2行?

Hello Hello Hi Hello Hello Hi Hi Hi Hi Hello 

分爲:

Hello Hello Hi Hello 
Hello Hi Hi Hi Hi Hello 

我想在2分割的單個線,通過使它們具有字符儘可能的接近的量,而不切斷字。

我想我可以用wc -w,wc -c,cut和/或awk來做,但也許你們可以提供一些更好的點子!

+3

上AskUbuntu這個問題是交叉貼:http://askubuntu.com/questions/603739/how-can-i-split-a-line-in-2- by-words-characters-bash-regex – John1024 2015-03-31 21:26:57

+0

這不是正則表達式的東西,至少不是純粹的表達式。你最好用空格分割,計算單詞的總數,找到最接近原始字符串中間點的空間(顯然,用換行符替換它)。不知道多麼友好的awk將與此,雖然... – Sam 2015-03-31 21:27:36

+0

嗨約翰,這是違反規則要求在這兩個地點? 我很抱歉,如果是這樣,但我已經做了幾次,這對我有用,因爲有時候,它沒有在其中一個站點回答,並在另一個站點回答。 – TuxForLife 2015-03-31 22:15:46

回答

10

這可以是fold工作,一個方便的util的包裝線:

$ s="Hello Hello Hi Hello Hello Hi Hi Hi Hi Hello" 
$ fold -w $((${#s}/2 + 1)) -s <<< "$s" 
Hello Hello Hi Hello 
Hello Hi Hi Hi Hi Hello 

這使用fold於每行換到一個給定的長度。我們如何計算長度?只需使用${#variable}併除以2(+1以防止在長度奇數時獲得三行)。然後我們使用-s來防止破壞單詞。

man fold

fold - wrap each input line to fit in specified width 

    -s, --spaces 
      break at spaces 

    -w, --width=WIDTH 
      use WIDTH columns instead of 80 
+0

完美,謝謝你,我會考慮摺疊,我從來沒有聽說過它! 出於好奇,它在Linux發行版中是否便攜和/或頻繁? – TuxForLife 2015-03-31 22:17:14

+2

我不知道它是多麼便攜,但例如我甚至可以在cygwin中找到它。所以看起來好像很多。 – fedorqui 2015-03-31 22:37:31

+1

您應該意識到'fold'摺疊_bytes_而不是_characters_。 – 2015-03-31 22:38:21