2016-07-28 78 views
1

數據文件有672個以tab作爲分隔符的列,CRLF位於每行末尾,也在一行內有效地將一行分成多行。在一個大的unix文件中刪除CRLF,在一行中

***Current*** 
    row1: col1<\t>col2<\t>col3<\t>col4<\r\n> 
    row2: col1<\t>col2<\r\n> 
      col3<\r\n> 
      col4<\r\n> 

    ***Expected*** 
    row1: col1<\t>col2<\t>col3<\t>col4<\r\n> 
    row2: col1<\t>col2<\t>col3<\t>col4<\r\n> 
+0

在你的樣品,如何你只能探測到2行? – user3089834

+0

@ user3089834:不確定你在問什麼,這只是「當前」和「結束狀態」的一個示例。在unix中,我使用頭來對文件中的數據進行採樣。 –

+0

由於數據中的CRLF作爲您的示例行,如果您無法檢測到行的末尾,則無法解決您的問題。在我看來,我在你的示例數據中看到4行,因爲我認爲「\ r \ n」是一行的結尾。 – user3089834

回答

0

這裏是在被執行時會造成輸出文件expected.txt

#!/bin/bash 

input_file=$1; 
j=1 
for i in `awk '{for(k=1;k<=NF;++k) print $k}' $input_file` 
do 
     if [ $(($j % 4)) -eq 0 ]; then 
       echo $i >> expected.txt 
     else 
       echo -n $i"  " >> expected.txt 
     fi 
     ((++j)) 
done 

./reorder.sh current.txt

0

以下sed腳本幫我去除CRLF字符腳本reorder.sh

script.sed:join /\$/{N s/\\n// b join } 

的方法來調用上面的腳本

sed -f script.sed chap4 > chap4.new