2016-07-28 2 views
1

Файл данных имеет 672 столбца с вкладкой в ​​качестве разделителя, CRLF находится в конце каждой строки, а также внутри строки, эффективно разделяя одну строку на несколько строк.Удалить CRLF в большом файле unix, в строке

***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

На вашем образце, как вы можете обнаружить только две строки? – user3089834

+0

@ user3089834: Не уверен, что вы спрашиваете, это всего лишь образец «текущего» и «конечного состояния». в unix я использую голову для выборки данных в файле. –

+0

С данными CRLF в строке в качестве образца, вы не можете решить проблему, если не можете обнаружить конец строки. Со мной я вижу 4 строки в ваших данных образца, потому что я думаю, что «\ r \ n» - это конец строки. – 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

Следующая СЕПГ сценарий помог мне снять CRLF характер.

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

метод для вызова выше сценарий

sed -f script.sed chap4 > chap4.new 
Смежные вопросы