我尝试用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