본문 바로가기
컴퓨터/리눅스

리눅스에서의 > 와 >>

by adnoctum 2010. 9. 17.

   리눅스에서 > 와 >> 는 표준출력으로 출력되는 것을 파일로 보내는 것으로, > 는 파일을 새로 만들거나 덮어 쓰게 되며, >> 는 기존에 파일이 있으면 뒤에 덧붙이는 역할을 한다.

   표준출력은 주로 terminal 로 되어 있는 경우가 많다[각주:1]. 우리가 터미널에서 프로그램을 실행시켰을 때 출력되는 것을 파일로 보내고자 할 때 > 또는 >> 를 사용할 수 있다. 실제 사용 예를 살펴 보자.

[adnoctum@bioism analysis_code]$ history | grep -P ">"

을 하면 내가 사용했던 명령어들 중 > 가 들어갔었던 것만 출력이 되므로, 그 중의 일부를 살펴 보면,

  466  awk -F"\t" '$5 < $6 && $3 < 0.05' test.txt | cut -f2,3,4,5,6 | sort > t.txt
  532  ./find_including_module | awk '$1 >= 10' > tt.txt
  546  ./find_inclusive_cluster ./Responsiveness/Cancer/BreastCancer/merged t.surv.txt ALL T | awk -F"\t" '$6 >= 10' > tt.txt

정도 된다. 486 번의 명령어는 test.txt 라는 파일에서 deliminator를 tab 으로 지정하고, 5번째 열의 값이 6번째 열의 값보다 작으며, 3번째 열의 값이 0.05 보다 작은 줄을 출력을 하고, 이것을 cut 이 받아서 2,3,4,5,6 번째 열을 출력을 하며, 이 때 2번째 열의 값으로 정렬을 하고 그 결과를 t.txt 파일로 출력하는 것이다. 만약 기존에 이미 t.txt 라는 파일이 있었다면 그 내용은 없어지고, 없었다면 새로 만들어 진다. 532 번째 줄도 비슷한데, find_including_module 의 출력 결과 중 첫 번째 열의 값이 10 이상인 줄을 tt.txt 파일로 출력하는 것이다.

>> 를 사용한 실제 경우를 살펴 보면,

[adnoctum@bioism analysis_code]$ history | grep -P ">>"
  265  awk '$6 == "GRADEI"' ion.down.expr.txt >> ion.grade1.txt
  267  awk '$6 == "GRADE_I"' ion.down.expr.txt >> ion.grade1.txt
  270  awk '$6 == "GRADE1"' ion.down.expr.txt >> ion.grade1.txt

으로, 출력되는 내용을 ion.grade1.txt 라는 파일 뒤에 계속 덧붙이고 있다.

> 는 기존에 이미 있는 파일 내용을 실수로 덮어 쓸 수도 있으니 조심해야 한다.

이렇게 표준출력이라는 곳으로 출력되는 것을 파일로 출력하도록 출력 방향을 바꾸는 것을 redirection 이라고 할 수 있는데, 이와 같은 작업은 윈도우즈의 도스에서도 가능하다. (참고: 윈도우즈에서도 여전히 도스가 편리할 때)

(유입 검색어 때문에 작성함)
  1. C++ 에서는 std::cout 이 표준 출력을 표시한다. 주로 터미널이 되며, 윈도우즈의 경우 console application 이면 도스 창이 될 것이다. 펄이나 파이썬의 cgi는 표준 출력을 network 으로 전환시키기 때문에 cgi 모듈을 사용할 때 print 로 출력하는 것들이 웹으로 전송되는 것이다. [본문으로]