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

Pra*_*pta 2 linux awk ksh

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

Apr 24 2014;
is;
a;
sample;
;
Jun 24 2014 123;
may 25 2014;
is;
b;
sample;
;
Dec 21 2014 987
Run Code Online (Sandbox Code Playgroud)

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

Apr 24 2014;is;a;sample;;Jun 24 2014 123
may 25 2014;is;b;sample;;Dec 21 2014 987
Run Code Online (Sandbox Code Playgroud)

(我正在使用ksh)

jay*_*ngh 10

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

$ cat file
Apr 24 2014;
is;
a;
sample;
;
Jun 24 2014 123
may 25 2014;
is;
b;
sample;
;
Dec 21 2014 987
Run Code Online (Sandbox Code Playgroud)

你可以做:

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

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

您可以通过说明将输出重定向到另一个文件

awk '{ORS=(NR%6?"":RS)}1' file > newfile
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你应该总是尽可能测试正数,因为结果代码比测试负数更清晰并且消除了引入双重否定的任何可能性,所以我使用`ORS = NR%6?"":RS`而不是`ORS =!(NR) %6)RS:? ""`.我还将三元表达式括为可移植性:ORS =(NR%6?"":RS)`.虽然+1. (2认同)