我嘗試用awk或sed刪除\ n,當它們是兩個標記時。刪除兩個字符之間的 n(換行符)
例: 一個csv文件框架,在一列中換行。我需要刪除這個新行,但不是文本,而不是每行之間的新行。
row1-col1;row1-
col2;
row2-col1;row2-
col2;
應該像這樣:
row1-col1;row1-col2;
row2-col1;row2-col2;
我嘗試了很多過濾器沒有更迭,現在我有點迷惑。
感謝幫助
我嘗試用awk或sed刪除\ n,當它們是兩個標記時。刪除兩個字符之間的 n(換行符)
例: 一個csv文件框架,在一列中換行。我需要刪除這個新行,但不是文本,而不是每行之間的新行。
row1-col1;row1-
col2;
row2-col1;row2-
col2;
應該像這樣:
row1-col1;row1-col2;
row2-col1;row2-col2;
我嘗試了很多過濾器沒有更迭,現在我有點迷惑。
感謝幫助
如果你的線在-
總是分裂,那麼你可以使用下面的sed
腳本:使用sed
sed ':a;N;$!ba;s/-\n/-/g' file.txt
的一種方式。它將所有輸入添加到最後一行($!
),然後刪除前面的-
的所有換行符。
sed -n ':a ; $! { N; b a }; s/-\n/-/g ; p' infile
它產生:
row1-col1;row1-col2;
row2-col1;row2-col2;
我試過了,但根本沒有輸出。如果有問題,我正在使用一個mac終端。 – Barney 2013-03-07 21:57:29
如果它真的只是一個串聯每隔一行的事情,你可以做這樣的事情:
awk '(NR % 2) == 1 { saved=$0; next; } { printf("%s%s\n", saved, $0); }' file.txt
第一句節省每奇數在沒有打印的情況下打印第二行,第二次打印則保存了當前行後面的行,沒有插入新行。
試試這個:
awk '{if ($0~/;$/)print $0;else printf $0}' file
不要使用'print $ 0',而應使用'printf「%s」,$ 0'。當輸入文件包含「%s」或其他printf格式指令時嘗試使用它。 – 2013-03-09 15:02:20
$ 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;
我嘗試了我的Mac終端上,但它沒有工作... – Barney 2013-03-07 21:55:28
@Barney我很抱歉,但我無法驗證它的Mac終端上。我在Ubuntu上,它在我的終端上按預期工作。 – jitendra 2013-03-07 21:57:30