如何删除某个文本中的特殊换行
首先通过排序统计获取换行的字段s和一条正常数据的列数n
awk -F '|' '{print NF}}' abc.txt|sort -n | uniq -c
其中“|”为分隔符,“abc.txt”为存在换行的文件,NF为该条数据的列数.
例:
其中第二列为列数n,第一列为对应列数的总计数量。
由上述结果可以看出:一条正常数据有6个字段,2+5-1=6,因此,部分数据第2个字段存在换行。
下面通过4种方式处理异常换行:
1、通过导入表中,再处理导出的方式进行处理:
先把加载到一个表中,再用replace导出文件。
replace(replace(aa1."换行的字段名称",chr(13),''),chr(10),'')
2、使用gsub直接对文件进行处理:
cat abc.txt | awk -F '|' '{gsub(/\n/,"",$s); print $0}' > abc1.txt
其中s为存在换行的列,如上例,则s为2。
3、通过删除异常换行的行尾换行符进行处理:
a=`awk -F '|' '{if(NF!=n) {print NR}}' abc.txt`
for l in $a
do
echo $l
sed -i "$l,$l{N;s/\n/ /}" abc.txt
done
其中n为一条正常数据的列数,如上例,则s为6。
4、一条数据中存在多个字段有换行的情况,即一条正常数据变成2条或者多条的情况。直接对文件进行操作,类似方法三的操作:
a=`awk -F '|' '{if(NF!=n) {print NR}}' abc.txt|head -1`
while [ "$a" != "" ]
do
sed -i "$a,$a{N;s/\n/ /}" abc.txt
a=`awk -F '|' '{if(NF!=n) {print NR}}' abc.txt|head -1`
done
数据量小的话比较快,数据量大,换行多的话就比较慢,也适用于一条数据多个换行。