2014-01-08 28 views
0

我需要在當前行開始時刪除上一行的「行尾」不是數字^ [!0-9],基本上如果匹配,則追加到行之前,I 'm sed & awk n00b,真的很喜歡他們btw。感謝當匹配正則表達式時替換上一個

編輯:

$貓文件

1;1;1;text,1 
2;4;;8;some;1;1;1;more 
100;tex 
t 
broke 

4564;1;1;"also 
";12,2121;546465 

$ 「腳本」 文件

1;1;1;text,1 
2;4;;8;some;1;1;1;more 
100;text broke 
4564;1;1;"also";12,2121;546465 
+0

沒有時間在此刻一個完整的答案,但基本上你只需要保持的最後一行中的變量直到你看到下一行,然後決定如何處理它。可以單獨打印或使用當前行打印。然後你需要確保在輸入完成時輸出最後一行(在awk或類似的'END'塊中)。 –

回答

2

你沒有張貼任何樣品輸入或預期輸出所以這是一個猜測,但它聽起來像你要求的:

$ cat file 
a 
b 
3 
4 
c 
d 
$ awk '{printf "%s%s",(NR>1 && /^[[:digit:]]/ ? ORS : ""),$0} END{print ""}' file 
ab 
3 
4cd 

老年退休金計劃新發布的輸入:

$ awk '{printf "%s%s",(NR>1 && /^[[:digit:]]/ ? ORS : ""),$0} END{print ""}' file 
1;1;1;text,1 
2;4;;8;some;1;1;1;more 
100;textbroke 
4564;1;1;"also";12,2121;546465 
+0

對不起,我的意思是每一行都應以數字開頭,所以我想我應該儘可能多地運行你的答案需要時間,如果以^ \ n |^\ $開頭,這種方法有效嗎? – rzx0

+0

對不起,我不知道你在問什麼,請更新您的原始問題,以包含一些示例輸入和預期輸出 –

+0

請原諒我的英語,是不是我的第一語言,我希望現在更清楚,謝謝你的幫助埃德! – rzx0

0

這可能爲你工作(GNU SED):

sed -r ':a;$!N;s/\n([^0-9]|$)/\1/;ta;P;D' file 

保持兩行的模式空間和如果的開始第二行是空的或不是以整數開頭,刪除換行符。

0

,如果你有紅寶石您的系統上

array = File.open("file").readlines 
    array.each_with_index do |val,ind| 
    array[ind-1].chomp! if not val[/^\d/] # just chomp off the previous item's \n 
    end 
    puts array.join 

輸出

# ruby test.rb 
1;1;1;text,1 
2;4;;8;some;1;1;1;more 
100;textbroke 
4564;1;1;"also";12,2121;546465 
相關問題