1

我有一个来自 3rd 方系统的文件,我需要稍微更正一下。不时即将到来的文件在数据中间包含一个换行符。假设我能够找到这条损坏的线路。我需要做的只是删除换行符并将该行与上面的行连接(这将在我摆脱换行符时发生)。这是示例:

data_1 data_2 data_3 data_4 data_5
data_1 data_2 data_3 data_4 data_5
data_1 data_2 
 data_3 data_4 data_5
data_1 data_2 data_3 data_4 data_5
data_1 data_2 data_3 data_4 data_5
data_1 data_2 data_3 data_4 data_5

如您所见,第 3 行是错误的,需要通过删除换行符来修复/加入第 4 行。我有一个简单的脚本,它能够找到“错误”(太短)的行。问题是:如何从特定行中删除换行符(我的行号错误)。

我尝试使用 sed ( sed ':a;N;$!ba;3s/\n/ /' data.log) ,其中 3 之前s是行号,但它不起作用。

...或者也许有更好的解决方案来解决这个问题。请帮忙。

4

3 回答 3

3

您可以使用 sed 来完成,利用新行开头的空间

sed -e '{
N
s/\n //
}' data.log

这不需要您提前知道虚假换行符在哪里,但只会纠正一个中断(因为如果该行被分成 3 行,它就不起作用)

于 2013-01-11T15:50:19.993 回答
2

如何从特定行中删除换行符(我的行号错误)

如果您已经确定了目标行号,那么使用 awk 您可以执行以下操作:

awk -v N=3 '{if (NR==N) l=$0; else if (NR==N+1) print l $0; else print}' infile
于 2013-01-11T15:44:04.687 回答
2

这不是您真正要求的,但它会自动找到损坏的行并修复它们。col只需通过设置参数设置您期望的列数

awk -v col=5 '
           { 
               if ((cur + NF) < col) 
               { 
                   printf($0); 
                   cur=cur+NF; 
               } 
               else 
               { 
                   print $0; 
                   cur=0; 
               } 
           }' your_file
于 2013-01-11T15:50:48.697 回答