Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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
使用shell脚本修复损坏的文本文件_Shell_Unix - Fatal编程技术网

使用shell脚本修复损坏的文本文件

使用shell脚本修复损坏的文本文件,shell,unix,Shell,Unix,我有一个损坏的文件,如下所示:- col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15 a|b|c|d|e|f|g|h|i|j|k|l||| a|b|c|d|e|f|g|h|i|j|k|l||| a|b|c|d|e|f|g| h|i|j|k|l||| a|b|c|d|e|f|g|h|i|j|k|l||| a|b|c|d|e|f|g|h|i|j|k|l||| a|b|c|d|e|f|g|h|

我有一个损坏的文件,如下所示:-

col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|
h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
实际上应该是这样的:-

col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|
h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
在这个文件中,我有15列,它们由管道“|”分隔。 文件中的第三条记录被拆分为两条记录,实际上应该是一条记录

我尝试过以下代码:- 1.
sed-e'/^$/d'source_file.txt | tr'\n'>temp.txt
-应将所有记录附加到一行中
2.
awk-VRS='[\n |]'{a=$0;getline b;getline c;getline d;getline e;getline f:getline g;getline h;getline i;getline j;getline i;getline k;getline m;getline m;getline n;getline n;getline o;打印a、b、c、d、e、f、g、h、i、j、k、l、m、n、o}'OFS='',它查找没有14个管道的行,并在重试之前将下一行输入追加到模式空间:

$ sed ':a; /\([^|]*|\)\{14\}/!{N; s/\n//; ba}' foo.txt
col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||

感觉像是awk的工作。累积条目的计数,并在有15条时发出换行符:

$ cat input
col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|
d|e|f|g|
h|i|j
|k|l|||
a|b|c|d|e|f|g|
h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d
|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
$ awk '{c += NF; printf "%s", $0} c >= 15 {printf "\n"; c = 0}' FS=\| input
col1|col2|col3|col4|col5|col6|col7|col8|col9|col10|col11|col12|col13|col14|col15
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||
a|b|c|d|e|f|g|h|i|j|k|l|||