2014-04-02 2 views
0

bash 스크립트에서 파일을 읽는 동안 약간의 문제가 발생합니다. 여기 bash 파일 읽기와 관련하여 예기치 않은 동작 EOL EOF

내가 읽으려고하고있는 파일입니다

--------------- (not in the file) 
123.234 231.423 
1223.23 132.134 

--------------- (not in the file) 

이 파일에서, 4 개 개의 숫자는 두 개의 서로 다른 라인에 있으며 파일의 끝에 공백 라인이있다. 각 행 끝에는 "공백"문자가 없습니다.

나는이 스크립트를 사용하여이 파일을 읽을하려고 할 때 :

for val in $(cat $myFile) 
do 
    echo "$val "; 
done 

나는 다음과 같은 결과가 수행 I 변수 뒤에 공백 문자를 추가하면

123.234 
231.423 

1223.23 
32.134 

, 그것은이 삭제됩니다를 마지막 번호의 시작

for val in $(cat ~/Windows/Trash/bashReadingBehavior/trashFile.out) 
do 
    echo "$val "; 
done 

출력 :

123.234 
231.423 

1223.23 
    2.134 

실제로 마지막 숫자 다음에 추가 된 문자는 마지막 숫자의 시작 부분에 쓰여집니다. 이것은 캐리지 리턴 또는 이와 유사한 보이지 않는 문자로 인한 동작이지만이 문제를 해결하는 방법을 알 수는 없다고 가정합니다.

+4

당신은 Windows를 언급합니다. 'cat -vte file'을하면'^ M' 문자를 얻나요? 당신은'dos2unix file'을 사용해서 그것을 "청소"할 수 있습니다. – fedorqui

답변

3

입력 파일의 DOS 행 결말이 있습니다. 당신이

echo "$val " 

을 실행하면 $val의 값은 줄에 이미 어떤 덮어 쓸 수 있습니다 마지막 두 공간 이전에 인쇄 된 이동 줄의 시작 부분으로 커서가 인쇄 캐리지 리턴,로 끝납니다. 난 정말하지 않는 것이 좋습니다 보여 같은 for 루프

while read; do 
    REPLY=${REPLY%$'\r'} # Remove the carriage return from the line 
    for val in $REPLY; do 
     echo "$val" 
    done 
done 

순회 선 이상 :

이 파일에서 읽을 다음 코드를 사용한다 (cat의 출력을 반복하지 않음) 어느 쪽인지는 알 수 있지만,이 경우 파일에서 읽은 후 REPLY에 저장된 행이 공백으로 구분 된 숫자 목록으로 알려져있는 경우에는 정상입니다.

+0

답변 해 주셔서 감사합니다. 이것은 완벽하게 작동했습니다. –