2016-07-28 2 views
1

データファイルには、タブが区切り文字として672の列があり、各行の最後にCRLFがあり、1行を複数の行に効果的に分割します。ここで大規模な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:あなたが尋ねていることを黙ってはいない、それは単に「現在の」と「終わりの状態」のサンプルです。私はファイル内のデータをサンプリングするために頭を使っています。 –

+0

データにCRLFが行内にサンプルとして含まれているため、行の末尾を検出できない場合は問題を解決できません。私は、 "\ r \ n"が行の終わりだと思うので、私はあなたのサンプルデータに4行を見ます。 – user3089834

答えて

0

実行スクリプトreorder.shは、出力ファイル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文字を削除するために私を助けました。

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

あなたのサンプルで

sed -f script.sed chap4 > chap4.new 
関連する問題