我有一个来自第三方系统的文件,我需要纠正一点。即将到来的文件中包含数据中间的新行字符。让我们说我能够找到这条损坏的线路。我需要做的只是删除新的行字符并将行与上面的行连接(这将在我删除新的行字符时发生)。 这是一个例子:
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
),其中s
之前的3是一个行号,但它不起作用。
...或者可能有更好的解决方案来解决这个问题。请帮忙。
答案 0 :(得分:3)
你可以使用sed,利用新行开头的空间
sed -e '{
N
s/\n //
}' data.log
这不要求您提前知道虚假换行的位置,但只会纠正一次中断(如果该行被拆分为3则不起作用)
答案 1 :(得分:2)
如何从特定行中删除新行字符(我有一个 错误的行号)
如果您已找出目标行号,那么使用awk可以执行此操作:
awk -v N=3 '{if (NR==N) l=$0; else if (NR==N+1) print l $0; else print}' infile
答案 2 :(得分:2)
这不是你要求的,但它会自动找到损坏的行并修复它们。只需设置col
参数
awk -v col=5 '
{
if ((cur + NF) < col)
{
printf($0);
cur=cur+NF;
}
else
{
print $0;
cur=0;
}
}' your_file