반응형
블로그 이미지
> 희망은 인간의 고통을 연장시키는 가장 사악한 것이다 > 죽음에 이르지 않는 고통은 우리를 더욱 강하게 만든다. -니체 integer

카테고리

분류 전체보기 (348)
여행 (45)
신변잡기(身邊雜記) (179)
신변잡기(身邊雜器) (21)
신변잡기(身邊雜技) (63)
신변잡기(身邊雜奇) (39)
Total
Today
Yesterday

유닉스를 사용하다보면 텍스트 데이터를 짜집기 할 일이 생길것이다.
그럴때마다 pc로 내려서 엑셀 및 울트라 에디터에서 작업을 하는 이들을 종종 보는데
그럴때마다 cut 과 uniq 라는 유닉스 명령어를 권해주고 싶다.

일단 샘플 데이터 a.txt 라는 파일의 내용을 보자.

1|2009-12-31|aaa
2|2009-12-31|bbb
3|2009-12-31|aaa
4|2009-12-31|aaa
5|2009-12-31|ccc
6|2009-12-31|ddd
7|2010-1-1|aaa
8|2010-1-2|aaa
9|2010-1-3|bbb
10|2010-1-4|ccc
11|2010-1-4|eee
12|2010-1-4|fff
13|2010-1-4|ddd

'|' 라는 것을 구분자로 하여 첫번째 항목은 순번, 두번째 항목은 발생일, 세번째 항목은 발생자(사고친 넘?)라고 하자.

자! 나는 사고친넘의 명단만 필요하다. 어떻게 할 것인가?
구분자가 있고, 몇 번째 나오는지만 알면 게임이 끝난것이다. <cut> 이라는 명령어를 이용해 보자.

test:/user1] cut -d \| -f 3 a.txt

aaa
bbb
aaa
aaa
ccc
ddd
aaa
aaa
bbb
ccc
eee
fff
ddd

자! 사고친 놈들의 명단은 나왔다.
그런데 뭔가 부족하다. 중복된 넘들이 나와 보기가 힘들다....
그럴때 uniq 라는 명령어를 이용해 보자. (파이프 '|' 와 함께 사용을 해야 한다.)

test:/user1] cut -d \| -f 3 a.txt | uniq    
aaa
bbb
aaa
ccc
ddd
aaa
bbb
ccc
eee
fff
ddd

그런데 중복이 제거가 되다만듯한 느낌이다. 왜일까?
uniq 명령어의 메카니즘이 순차적 데이터에 대해 중복을 제거하다 보니 그럴수 밖에 없다.
즉, a a a 이렇게 들어오면 a 로 정리가 되지만 a a b a 로 들어오면 a b a 로 밖에 정리가 안된다.

그럼 어떻게 하면 될까?
sort 명령어 투입이다. 이렇게....

test:/user1] cut -d \| -f 3 a.txt | sort | uniq
aaa
bbb
ccc
ddd
eee
fff

이해가 됐는가?
조금 더 확장된 사용은 나중에... ^^

Posted by integer
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함