2016-07-28 1 views
1

데이터 파일에는 탭이 구분 기호로 사용 된 672 개의 열과 각 행 끝에 CRLF가 있으며 한 행을 여러 행으로 효과적으로 분할하는 행이 있습니다.행 내 큰 유닉스 파일의 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

다음은 출력 파일 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 문자를 제거하기 위해 나에게 도움이 생성됩니다 실행 스크립트 reorder.sh입니다.

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

이 방법은 위의 스크립트 샘플에서

sed -f script.sed chap4 > chap4.new