본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스, 유닉스] 파일 중간 범위만큼 출력하고 싶을 때, 특정 라인부터 라인까지, 특정 라인만 출력하고플때 (head&tail, sed, awk)

[리눅스, LINUX, 유닉스, UNIX 완전 정복 목차, 포스팅 링크 모음]

ㅎㅎ 안녕하세요 ㅎㅎㅎ

맨날 하나의 주제를 가지고 포스팅을 했다면~

오늘 잠깐 쉬어가는 느낌으로 ~~~ 명령어의 다양한 활용법(?)을 짧게 포스팅해볼까 합니다.

 

그 주제는 바로~~~~~

특정 라인 또는 라인 범위를 출력하는 방법!

 

특정 라인이나 범위만을 골라서 보여주는 명령어가 따로 있지는 않아요 ㅎㅎ

그렇기에 어느날 왠지 여러분들이 문득 궁금해 할 것 같아서 적어놨답니당

해당 기능(?)을 수행하는 방법으로는 여러가지가 있을 수 있어요.

 

1. HEAD 명령어 & TAIL 명령어

목차 기준으로 바로 직전 포스팅에서 head와 tail을 배웠었죠? ㅎㅎ

↓ head tail 포스팅

 

[Linux]알아야 할 리눅스 기본 명령어 3탄 및 관련문제(head,tail,more,less,file,clear)

리눅스 완전 정복 : 리눅스 목차 저번 포스팅에 이어서 마지막 3탄입니다. 알아야 할 기본 리눅스 명령어 3탄 오늘은 head, tail, more, less, file, clear 명령어를 살펴볼거예요. 11. head 텍스트 파일의 첫 부..

jhnyang.tistory.com

head와 tail로 구성하는 방법을 먼저 알아봅시당.

 

일단 명령어에 대해 간단히 언급하고 넘어가자면,

head : 텍스트 파일의 첫 부분을 보여주는 명령어 (기본 10줄)

tail : 텍스트 파일의 끝 부분을 보여주는 명령어 (기본 10줄)

이었어요!!

▶ 범위 출력

근데 만약 맨 앞 10줄이 아니라, 맨 뒤 10줄도 아니고 사이 중간 20줄을 보고 싶을 수도 있잖아요!

그럴 때는 head와 tail을 아래처럼 섞으면 됩니당.

1
head -20 test.txt | tail
cs

위 명령어는 무슨 의미일까요?

예를 들어 30행인 test.txt 파일에서 11행부터 20번째 행까지만 출력해서 보려고 하면,

'head -n 20 test.txt ' = 일단 맨 앞 20행을 출력해

' | tail ' = 그리고 그 결과를 입력으로 넣고 뒷 줄 10행만 보여줘 (tail은 기본 10줄이니까)

이렇게 하면 11행부터 20행까지 나오겠죠?

그래서 head -n 20 test.txt | tail 가 범위 출력을 할 수 있게 되는 겁니다.

▶ 특정 라인 출력

근데 특정 한 줄만 뽑아서 보고 싶을 수도 있겠죠

1
head -10 test.txt | tail -1
cs

앞 열 개 중 마지막 한 줄 이니까 10라인만 출력하라는 의미가 될거예요 ㅎㅎ

 

2. sed 명령어

아직 배우지는 않았지만 sed라는 명령어를 사용해서 출력할 수도 있어요. 여윽시 sed~~

▶ 범위 출력

1
sed -'20,30p' test.txt
cs

test.txt에서 20에서 30까지의 라인들만 프린트 한다는 의미!

뒤에 p는 프린트의 약자로 20행부터 30행까지 출력하라는 의미에서 붙여주는 거예요 ㅎㅎ

sed 실행 모습

58라인부터 65라인까지 잘 출력해서 보여주는걸 실습사진을 통해 확인할 수 있습니다.

▶ 특정 행부터 파일 끝까지 출력하고 싶다면?

1
sed -"20, \$p" test.txt
cs

$는 마지막을 의미하는데 변수를 나타내는 ${}의 $로 해석되지 않게 앞에 역슬레시를 붙여서 특수문자가 그대로 지켜질 수 있도록 해줍시다. 

이렇게 하면 20행부터 끝까지 출력이 되겠죠?

▶ 특정 라인 출력

물론 특정 라인만 출력하는 것도 가능해요

그냥 컴마 없이 출력하고 싶은 라인만 써주면 됨..

1
sed -n 20p test.txt
cs

20번째 행만 출력~~

 

3. awk 명령어

sed만큼 강력한 awk명령어로도 가능합니당. 괜히 두 명령어를 자유자재로 다룰 수 있다면 셸 강자라는 말이 나오는게 아니야..

 

▶ 특정 라인 출력

awk명령어는 특정 한 라인만 출력하는걸 먼저 살펴볼게요~!

1
awk 'NR==10' test.txt
cs

10번째 라인만 출력하라는 뜻인걸 짐작만으로도 알 수 있는 간결한 코드예요

awk에서 NR변수는 하나의 레코드를 처리한 후 1이 증가하는 변수로 몇 번째 행에 있는지 나타내주는 역할을 해요 ㅎㅎ

▶ 범위 출력

그래서 진짜 범위처럼.. 이렇게 표현이 가능!

1
awk "NR >= 20 && NR <= 30" test.txt
cs

20라인부터 30라인까지 출력~~~

이 경우에는 58라인부터 65라인까지 출력하라는 뜻

위의 사진 역시 awk로 58라인부터 65라인까지 출력하는 것으로 확인할 수 있습니다.

▶ 특정 행부터 파일 끝까지 출력하고 싶다면?

예상했다시피~~ 20행부터 끝까지 출력하려면 !

1
awk "NR >= 20" test.txt
cs

직관적이라 추가적인 설명이 필요하지 않겠군요 후후

 

오늘은 간략한 포스팅을 진행해봤습니다. 이후 포스팅에서 sed와 awk에 대해서 배운 뒤 다시 돌아와서 해당 포스팅의 기억을 더듬더듬 하면서 복습하는 것도 좋겠네요! 공감 or 댓글 or 보답광고는 큰 힘이됩니당. 항상~~ 잘못된 거 있으면 알려주시면 좋아요. 

다음 포스팅에서 봐용