2013-03-07 102 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; 
相关问题