Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
如何在UNIX中从一个字符串中间的可变长度文件替换CRLF CHAR?_Unix - Fatal编程技术网

如何在UNIX中从一个字符串中间的可变长度文件替换CRLF CHAR?

如何在UNIX中从一个字符串中间的可变长度文件替换CRLF CHAR?,unix,Unix,我的示例文件是可变长度的,没有任何字段分隔符。行的长度至少为18个字符,“CRLF”可能(并非总是)在第11-15列之间。如何在中间有一个新的行字符(“CRLF”)时,用一个空格替换它(列11-15)。我仍然想保持真实的记录。 样本数据: 输入: 1123xxsdfdsfsfdsfdssa 1234ddfxxyff frrrdds 1123dfdffdfdxxxxxxxxxas 1234ydfyyyzm knsaaass 1234asdafxxfrrrfrrrsaa 1123werwetrret

我的示例文件是可变长度的,没有任何字段分隔符。行的长度至少为18个字符,“CRLF”可能(并非总是)在第11-15列之间。如何在中间有一个新的行字符(“CRLF”)时,用一个空格替换它(列11-15)。我仍然想保持真实的记录。 样本数据:

输入:

1123xxsdfdsfsfdsfdssa
1234ddfxxyff
frrrdds
1123dfdffdfdxxxxxxxxxas
1234ydfyyyzm
knsaaass
1234asdafxxfrrrfrrrsaa
1123werwetrretttrretertre
预期产出:

1123xxsdfdsfsfdsfdssa
1234ddfxxyfff rrrdds
1123dfdffdfdxxxxxxxxxas
1234ydfyyyzm knsaaass
1234asdafxxfrrrfrrrsaa
1123werwetrretttrretertre
$ awk 'length($0) < 18 { getline x; $0 = $0 " " x} { print }' data
1123xxsdfdsfsfdsfdssa
1234ddfxxyff frrrdds
1123dfdffdfdxxxxxxxxxas
1234ydfyyyzm knsaaass
1234asdafxxfrrrfrrrsaa
1123werwetrretttrretertre
$
我尝试的是:

sed '/^.\{15\}$/!N;s/./ /11' filename

但是上面的代码只是添加了空间,没有删除“CRLF”

给定您的示例数据,这似乎产生了所需的输出:

1123xxsdfdsfsfdsfdssa
1234ddfxxyfff rrrdds
1123dfdffdfdxxxxxxxxxas
1234ydfyyyzm knsaaass
1234asdafxxfrrrfrrrsaa
1123werwetrretttrretertre
$ awk 'length($0) < 18 { getline x; $0 = $0 " " x} { print }' data
1123xxsdfdsfsfdsfdssa
1234ddfxxyff frrrdds
1123dfdffdfdxxxxxxxxxas
1234ydfyyyzm knsaaass
1234asdafxxfrrrfrrrsaa
1123werwetrretttrretertre
$
$awk'长度($0)<18{getline x;$0=$0“x}{print}数据
1123xxSDSDSFDSSA
1234ddfxxyff frrrdds
1123DFDFFDFDXxxxxxxxas
1234ydfyyyzm KNSAAS
1234ASDAFXXFRRRSA
1123Werwetrettrretre
$
然而,如果输入包含CRLF行结尾,事情就不会那么愉快了;最好完全过滤掉CR字符(Unix文件通常不包含CR,当然也不具有CRLF行结尾)

$tr-d'\r'

如果您确实需要DOS风格的CRLF输入和输出,您可能需要使用诸如
utod
unix2dos
(或其他类似工具)之类的程序从Unix行结尾转换为DOS。

显示您迄今为止的尝试。安德鲁:用预期的输出编辑了问题,并添加了我尝试过的内容。非常感谢。文件中的所有行是否都有CRLF行结尾?或者CRLF是否仅在分割线时出现;否则,行是否有NL(LF)结尾?