文本文件包含奇异字符的行 - 想要修复

时间:2015-02-11 16:52:50

标签: linux encoding character controls

我是一个没有经验的程序员,正在处理一个包含我正在尝试处理的数据的大型文本文件中的新问题。这是我所看到的屏幕截图(使用' less' - 我在Linux服务器上):

https://drive.google.com/file/d/0B4VAqfRxlxGpaW53THBNeGh5N2c/view?usp=sharing

生物信息学家会将此文件识别为" fastq"包含DNA序列数据的文件。屏幕截图的上半部分包含其预期格式的数据(我承认它包含一些"奇怪的"字符,但这不是问题)。然而,下半部分(许多字符以白色阴影显示)完全搞砸了。如果我向下滚动文件,它最终会在大约500行后返回正常文本。我想修复它,因为它打破了我试图执行的下游操作(它正好抱怨文件中的这个位置)。

有没有办法grep和删除阴影线?或者我可以通过某种方式更改有问题的行的编码来解决这个问题吗?

谢谢

2 个答案:

答案 0 :(得分:0)

如果运气好,可以使用

strings file > file2

哦,好吧,试试另一种方式。

确定正确线条的线长(我认为前两行不同)。

head -1 file | wc -c
head -2 file | tail -1 | wc -c

嗯,wc也计算两个长度的行尾,减去1。

尝试一次读取文件1行。使用case语句,这样你就不必编写很多else-if结构来比较长度和预期的长度。在代码中,我将接受长度20,100和330 将所有内容重定向到循环外的另一个文件(内部将覆盖每一行)。

cat file | while read -r line; do
   case ${#line} in
      20|100|330) echo $line ;;
   esac
done > file2

完全不同的方法是使用sed,awk或grep过滤错误的行,但这需要知道您将使用哪些字符并且不会接受。
是的,当你是一个幸运的男人时,所有丑陋的线条都会有一个共同的特征,如'<'或者也许是' @'。在这种情况下,您可以使用egrep:

egrep -v "<|@" file > file2

答案 1 :(得分:0)

基于检查 SNAP

sed -r 's/<[[:alnum:]]{2}>//g;s/\^.//g;s/ESC\^*C*//g' file

在文件中进行实际更改并制作扩展名为.bak的备份文件

  sed -r -i.bak 's/<[[:alnum:]]{2}>//g;s/\^.//g;s/ESC\^*C*//g' file