2013-03-07 109 views
1

我嘗試用awk或sed刪除\ n,當它們是兩個標記時。刪除兩個字符之間的 n(換行符)

例: 一個csv文件框架,在一列中換行。我需要刪除這個新行,但不是文本,而不是每行之間的新行。

row1-col1;row1- 
col2; 
row2-col1;row2- 
col2; 

應該像這樣:

row1-col1;row1-col2; 
row2-col1;row2-col2; 

我嘗試了很多過濾器沒有更迭,現在我有點迷惑。

感謝幫助

回答

0

如果你的線在-總是分裂,那麼你可以使用下面的sed腳本:使用sed

sed ':a;N;$!ba;s/-\n/-/g' file.txt 
+0

我嘗試了我的Mac終端上,但它沒有工作... – Barney 2013-03-07 21:55:28

+0

@Barney我很抱歉,但我無法驗證它的Mac終端上。我在Ubuntu上,它在我的終端上按預期工作。 – jitendra 2013-03-07 21:57:30

0

的一種方式。它將所有輸入添加到最後一行($!),然後刪除前面的-的所有換行符。

sed -n ':a ; $! { N; b a }; s/-\n/-/g ; p' infile 

它產生:

row1-col1;row1-col2; 
row2-col1;row2-col2; 
+0

我試過了,但根本沒有輸出。如果有問題,我正在使用一個mac終端。 – Barney 2013-03-07 21:57:29

1

如果它真的只是一個串聯每隔一行的事情,你可以做這樣的事情:

awk '(NR % 2) == 1 { saved=$0; next; } { printf("%s%s\n", saved, $0); }' file.txt 

第一句節省每奇數在沒有打印的情況下打印第二行,第二次打印則保存了當前行後面的行,沒有插入新行。

1

試試這個:

awk '{if ($0~/;$/)print $0;else printf $0}' file 
+1

不要使用'print $ 0',而應使用'printf「%s」,$ 0'。當輸入文件包含「%s」或其他printf格式指令時嘗試使用它。 – 2013-03-09 15:02:20

0
$ cat file      
row1-col1;row1- 
col2; 
row2-col1;row2- 
col2; 

$ awk '{ORS=(NR%2?"":"\n")}1' file 
row1-col1;row1-col2; 
row2-col1;row2-col2; 
相關問題