Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 删除bash中特定行中的新行字符(将两行合并为一行)_Linux_Bash_Sed - Fatal编程技术网

Linux 删除bash中特定行中的新行字符(将两行合并为一行)

Linux 删除bash中特定行中的新行字符(将两行合并为一行),linux,bash,sed,Linux,Bash,Sed,我有一个文件来自第三方系统,我需要纠正一点。不时出现的文件包含一个新的行字符在中间的数据。假设我能找到这条损坏的线路。我需要做的只是删除新行字符并将该行与上面的行连接起来(当我删除新行字符时会发生这种情况)。 以下是一个例子: 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 d

我有一个文件来自第三方系统,我需要纠正一点。不时出现的文件包含一个新的行字符在中间的数据。假设我能找到这条损坏的线路。我需要做的只是删除新行字符并将该行与上面的行连接起来(当我删除新行字符时会发生这种情况)。 以下是一个例子:

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是行号,但它不起作用

。。。或者也许有更好的办法解决这个问题。请帮忙

如何从特定行中删除新行字符(我有一个 错误的线路号)

如果您已经计算出目标行号,则可以使用awk执行以下操作:

awk -v N=3 '{if (NR==N) l=$0; else if (NR==N+1) print l $0; else print}' infile
如何从特定行中删除新行字符(我有一个 错误的线路号)

如果您已经计算出目标行号,则可以使用awk执行以下操作:

awk -v N=3 '{if (NR==N) l=$0; else if (NR==N+1) print l $0; else print}' infile

您可以使用sed,充分利用新行开头的空间

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

这并不要求您事先知道伪换行符的位置,但只会纠正一个中断(因为如果将换行符拆分为3,则它不起作用)

您可以使用sed,利用换行符开始处的空间

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

这并不要求您事先知道伪换行符的位置,但只会更正一个中断(因为如果将行拆分为3行,则此操作不起作用)

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

awk -v col=5 '
           { 
               if ((cur + NF) < col) 
               { 
                   printf($0); 
                   cur=cur+NF; 
               } 
               else 
               { 
                   print $0; 
                   cur=0; 
               } 
           }' your_file
awk-v col=5'
{ 
如果((cur+NF)
这并不是您真正想要的,但它会自动查找损坏的行并修复它们。只需通过设置
col
参数来设置期望的列数

awk -v col=5 '
           { 
               if ((cur + NF) < col) 
               { 
                   printf($0); 
                   cur=cur+NF; 
               } 
               else 
               { 
                   print $0; 
                   cur=0; 
               } 
           }' your_file
awk-v col=5'
{ 
如果((cur+NF)
如果有多余的换行符,行的开头是否有空格?是的。在下一行的边界处有一个“空格”(紧跟错误行的那一行)。在“腐败”的情况下,你能指望空格一直存在吗?:-)祝你好运。如果有多余的换行符,行的开头有空格吗?是的。在下一行的边界处有一个“空格”(紧跟错误行的那一行)。在“腐败”的情况下,你能指望空格一直存在吗?:-)祝你好运。很好,它正在工作,但我读到awk相当慢。我了解到awk需要在开始处理之前读取整个文件。我即将发布的文件可能相当大。无论如何,非常感谢您的工作解决方案:-)。您对awk的假设是不正确的。awk或sed将在这里以几乎相同的速度运行。很好,它正在工作,但我读到awk相当慢。我了解到awk需要在开始处理之前读取整个文件。我即将发布的文件可能相当大。无论如何,非常感谢您的工作解决方案:-)。您对awk的假设是不正确的。awk或sed将在这里以几乎相同的速度运行。哈,好主意。很遗憾,我没有自己提出这个想法:-)。事实上,当损坏的线位于上方时,空间将始终位于新线前面。非常感谢!哈,好主意。很遗憾,我没有自己提出这个想法:-)。事实上,当损坏的线位于上方时,空间将始终位于新线前面。非常感谢!