리눅스에 있는 head 명령어에 대해 알아봅시다. 문제는 표준 출력으로 특정한 소스 파일들의 맨 마지막 줄만 제외하고 이어서 출력하라는 것입니다.

 


 man 페이지에서는, 기본적으로 파일에 있는 처음 10개 줄을 출력한다고 되어 있습니다. 10개 줄보다 적다면, 당연하게도 파일의 줄 수만큼 출력할 겁니다. file name은 여러 개 올 수 있습니다. 예를 들어 1.txt, 2.c와 같은 것들입니다.

 

 

 옵션을 보니, 문제 상황에 맞아 떨어지는 것은 -c나 -n인 듯 싶습니다. 문제는 line과 관련된 것이므로, -n이나 --lines를 주면 좋겠네요. 여기서 [-]NUM이라는 것이 있는데, 앞에 -가 붙으면, 마지막 NUM개의 line을 제외하고 출력합니다. 예를 들어, 파일이 11개의 줄로 이루어져 있고 --lines=-1 옵션이 들어왔다면, 10개의 줄을 출력합니다.

 

 반대로, --lines=20 이렇게 주면, 앞에서부터 최대 20개의 줄을 출력하게 됩니다.

 

 

 -q 옵션도 있는데 이것은 밑에서 후출하겠습니다.

 


 먼저 class.cpp와 cstr3.cpp의 내용 전체를 헤더와 함께 출력해 보도록 하겠습니다. class.cpp가 20줄이고, cstr3.cpp가 200줄인 경우도 있을 겁니다. 그러니 앞에서부터 몇 개의 line을 출력할 것인지보다는, 뒤에서부터 0개의 line을 제외한 나머지 line들을 모두 출력한다는 관점에서 보아야 합니다. -0 옵션을 넣으면 되겠네요.

 

 

 class.cpp의 모습입니다.

 

 

 그리고 이것은 cstr3.cpp의 모습입니다. 정말 제대로 출력되었는지, 실제 cstr3.cpp가 몇 개의 줄로 이루어졌는지 보도록 하겠습니다. cat과 wc를 piping 하면 알 수 있습니다.

 

 

 그리고, cat 명령어는 -n을 옵션으로 주면 line까지 출력합니다. 보니, 제대로 출력하고 있군요. 만약에 -3을 넣으면 어떨까요? 뒤에서부터 3개의 line은 출력하지 않으니, printf까지만 출력할 겁니다.

 

 

 정말 그렇게 보이는군요. 만약에 --lines = 3을 넣으면 어떨까요?

 

 진짜 앞에서부터 3줄이 나옵니다. 놀랍게도요. 사실 -를 잘 이용하면 파일의 s번째 줄부터 e번째 줄까지 출력하는 것도 가능한데요. 이에 대해서는 잘 생각해 보시면 좋겠습니다.

 


메타 데이터를 빼려고 합니다. 그럴려면 -q 옵션을 넣으면 됩니다.

 

 앞에 -q 옵션을 넣었더니, 파일명과 같은 메타 데이터가 빠졌음을 볼 수 있습니다.

 

 

 잘 출력된 듯 하네요.

댓글을 달아 주세요

  1. hunnek

    좋은 강좌 잘보고갑니다.