2015-02-11 73 views
-1

我是一個沒有經驗的程序員在包含我嘗試處理的數據的大文本文件中處理新問題。這裏是什麼,我看着屏幕捕獲(使用「少」 - 我是一個Linux服務器上):文本文件包含奇怪字符的行 - 想要修復

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

生物信息學家會識別此文件爲「的fastq」文件包含DNA序列數據。屏幕截圖的上半部分包含預期格式的數據(我承認它包含一些「奇怪」的字符,但這不是問題)。然而,下半部分(有許多字符用白色陰影)完全搞砸了。如果我要向下滾動該文件,它將在大約500行後最終返回到正常文本。我想修復它,因爲它正在破壞我正在執行的下游操作(它正好在文件中抱怨這個位置)。

有沒有辦法來grep和刪除陰影線?或者,我可以通過某種方式修改有問題的行上的編碼來解決這個問題嗎?

感謝

+0

把圖片輸出的文字形式在你的問題..它會更容易測試和刪除,以獲得您的預期輸出 – repzero 2015-02-11 22:57:37

+0

@Xorg - 我不認爲這會奏效。問題(我認爲)是陰影字符不是文字,而是控制字符和十六進制代碼的終端表示(我相信這也是爲什麼你的正則表達式沒有影響)。當我複製並粘貼到SO時,這些字符只會轉換爲它們的文字表示形式,所以對測試無用。我需要一些方法來識別這些特殊字符並擺脫它們。我今天用awk取得了一些成功,一旦我按照需要工作,就會發布。 – santayana 2015-02-12 01:46:13

回答

0

如果幸運的話,你可以使用

strings file > file2 

哦,嘗試另一種方式。

確定正確行的行長(我認爲前兩行是不同的)。

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

嗯,wc也從兩個長度計數行結束,減1。

比嘗試一次讀取文件1行。使用一個case-statement,這樣你就不必再寫很多其他東西了 - 如果這個結構是用來比較長度和預期長度的。在代碼中,我將接受長度20,100和330 將所有內容重定向到循環外部的另一個文件(內部將覆蓋每一行)。

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

總共不同的方法將被過濾錯線,SED,AWK或者grep的但這需要了解什麼字你會也不會接受。
是的,當你是幸運的(wo-)男人時,所有醜陋的線條都會有一個共同的字符,如'<'或者'@'。在這種情況下,你可以使用egrep的:

egrep -v "<|@" file > file2 
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 
+0

請在原帖中看到我的回覆。不幸的是,這個正則表達式不會改變我的文件。 – santayana 2015-02-12 01:48:13

+0

我看到...我認爲這些數據與他們的終端表示是在上面提到的「大文本文件」中...我的壞 – repzero 2015-02-12 02:07:52

相關問題