如何在linux中删除awk里面的尾随\ n \ n

时间:2014-05-01 03:59:10

标签: linux awk ksh

我有一个这样的输入文件:

Apr 24 2014;
is;
a;
sample;
;
Jun 24 2014 123;
may 25 2014;
is;
b;
sample;
;
Dec 21 2014 987

...我想要这样的输出:

Apr 24 2014;is;a;sample;;Jun 24 2014 123
may 25 2014;is;b;sample;;Dec 21 2014 987

(我使用ksh)

3 个答案:

答案 0 :(得分:10)

对于包含以下内容的数据文件:

$ cat file
Apr 24 2014;
is;
a;
sample;
;
Jun 24 2014 123
may 25 2014;
is;
b;
sample;
;
Dec 21 2014 987

你可以这样做:

$ awk '{ORS=(NR%6?"":RS)}1' file
Apr 24 2014;is;a;sample;;Jun 24 2014 123
may 25 2014;is;b;sample;;Dec 21 2014 987

我们将输出字段分隔符设置为在每第6条记录后打印一个新行(默认值为RS)。

您可以通过说

将输出重定向到另一个文件
awk '{ORS=(NR%6?"":RS)}1' file > newfile

或执行以下操作以更改当前文件

awk '{ORS=(NR%6?"":RS)}1' file > tmp && mv tmp file

答案 1 :(得分:0)

虽然标题暗示了一个严格的awk解决方案,但也有一个ksh标签,因为它似乎是程序应该做的唯一的事情,也许这也会这样做:

paste -d'\0' - - - - - - < file

awk版本一样,第一行中仍有一个尾随分号,输出样本中不存在。我不知道这是不是一个问题?

答案 2 :(得分:0)

perl -lne 'undef $a if($.%7==0);
           $a.=$_;
           if($.%6==0 ||(eof))
           {$a=~s/\;$//;print $a};' Your_file

经过测试here