텍스트 파일가지고 뭘 할때 line end 다루기

Line end는 둘 중 하나라고 봐도 무방한데 하나는 Unix(LF) 그리고 다른 하나는 Windows(CRLF).
참고로 Classic mac(CR)도 있긴 한데 요즘은 사용할 일 없음.

foo.csv가 아래와 같을때..

4/14/11,16:54:48,397.00
4/14/11,16:54:49,397.00

다음과 같이 awk로 필드값을 각각의 변수에 할당해주면


date=`awk 'BEGIN {FS=","} {if(NR==1) {print $1}}' ${foo.bar}`
time=`awk 'BEGIN {FS=","} {if(NR==1) {print $2}}' ${foo.bar}`
haha=`awk 'BEGIN {FS=","} {if(NR==1) {print $3}}' ${foo.bar}`

아래와 같이 date와 time은 정확하게 값이 입력된다.

echo date
4/14/11


echo time
16:54:48

문제는 haha인데 Windows파일이면 haha의 값이

397.00\r

이 되고 Unix파일이면

397.00

이 된다.

Line End값때문에 삽질하는 건 20년전이나 지금이나 변한게 없다.
dos2unix 혹은 기타 등등의 삽질을 통해 해결해도 되고 아니면 아래처럼 한줄 추가해주면 끄읕.


tr -d '\15\32' tmp.csv

참고 사이트.
http://kb.iu.edu/data/acux.html

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s