2012-10-07 60 views
0

我有一個快速的問題 - 我試圖解決一個文件系列的輸出已被更改的問題。殼來解​​決輸出問題 - 連接和文件讀取問題

輸出應該看起來像:

>Tests HadI-sdds1:4134:AAABBBBB:1:1101:6635:2407_2:N:0:TTTTTT 
AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSGDFGDFGDFGDFGDFGDFGDFGDCCVBWAAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSG 

但顯示爲:

>Tests HadI-sdds1:4134:AAABBBBB:1:1101:6635:2407_2:N:0:TTTTTT 
AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSGDFGDFGDFGDFGDFGDFGDFGDCCVBW 
AAAABBBBBEEEECCCCERTTSFASFASFDSGFSDGGSFGFSG 

我寫了下面的代碼,試圖修復它,但線16自然會返回一個空字符串,但是,當我做回聲沒有放入一個變種,我得到完整的一行。

#!/bin/sh 
FILENAME=$1 
OUTPUT=$2 
set LineToWrite='' 

while read LINE 
do 
if [ `echo "$LINE" | awk '{print substr($0,1,1)}'` == ">" ] 
    then 
     echo "$LineToWrite" >> $OUTPUT 
     echo "$LINE" >> $OUTPUT 
     set LineToWrite='' 
    else 
     set currLine=`echo "$LINE" | awk '{print substr($0,1,70)}'` 
     set LineToWrite+=$currLine 
fi 
done <$FILENAME 

任何想法來解決我的問題? (該文件包含> 100萬行)

非常感謝!

+0

問題是在'W A ...'之間的第三行中有1個空格,並且您想要刪除它嗎?以'>'字符開頭的數據行?是否真的有換行符嵌入到記錄中?如果不是,最好編輯您的示例數據,以便說明每條記錄出現在上面一行上的問題。 awk程序可以處理所有這些,但是你的描述太難遵循了,祝你好運 – shellter

+0

這是第2行(由W結尾)和3(由A開始)之間的換行符,它僅僅是不能正確顯示示例的stackoverflow 。每個第一行應該以「>」開始並且不應該被改變。 – user1726747

+0

沒有必要使用awk來測試字符串是否開始'>':'if test「$ LINE」! =「$ {LINE#>}」;那麼......' –

回答

0

三兩件事:

  • 沒有空間讓按鍵之間的外殼&值
  • 上的所有變量
  • 沒有必要貓文件中使用更多的報價|同時:使用while <condition>; do ...; done < FILE

使用更多的報價!他們至關重要。請參閱http://mywiki.wooledge.org/Quoteshttp://wiki.bash-hackers.org/syntax/wordshttp://wiki.bash-hackers.org/syntax/words

+0

嗨Sputnick, 我已經更新,因爲你所描述的,但仍然沒有變化:/ #!/ bin/sh的 FILENAME = $ 1 OUTPUT = $ 16 集LineToWrite = '' \t \t \t 而讀線 做 如果['回聲$線| AWK '{打印SUBSTR($ 0,1,1)}''== 「>」] \t然後 \t \t回波$ LineToWrite >> $ OUTPUT \t \t \t回波$ LINE >> $ OUTPUT \t \t \t集LineToWrite ='' \t \t else \t \t \t set currLine ='echo $ LINE | AWK '{打印SUBSTR(0,70,1 $)}'' \t \t \t集LineToWrite + = $ currLine 網絡 完成<$ FILENAME – user1726747

+0

這是無法讀取,更新原來的職位,謝謝。 –

+0

人造地球衛星,這就是我所做的:) – user1726747