[Linux] 파이프라인

ksp7331·2023년 12월 8일

Linux Pipeline

개요

명령어의 결과를 체인 형태로 연결하여 더 복잡한 작업을 수행할 수 있게 해주는 기능이다.

command1 | command2 | command3 | ...

상세

command1 | command2

예를 들어, 위와 같이 연결되어 있으면 command1의 출력이 command2의 입력이 된다.

$ ls -al | grep hello
-rwxrwxrwx 1 kim kim    25 Dec  7 14:30 hello.txt

위 명령의 경우, 리스트를 상세 출력한 결과를 grep에 전달한다. grep은 전달받은 데이터에서 hello가 들어있는 행을 출력한다.

관련 명령어

다음 명령어들은 파이프라인과 종종 같이 사용되는 명령어들이다.

grep

주어진 텍스트에서 패턴이 일치하는 행을 출력하는 명령어이다. 라인 단위로 출력하기 때문에 라인에서 일부 데이터를 추출하려면 추가 가공이 필요하다.

grep [option] pattern argument
$ ls -al | grep hello
-rwxrwxrwx 1 kim kim    25 Dec  7 14:30 hello.txt

pattern

패턴에는 정규표현식 사용이 가능하다.

argument

파일명이나 텍스트가 들어간다.

*.txt처럼 와일드카드를 사용해서 특정 확장자를 가진 파일들만 탐색하는 것도 가능하다.

awk

텍스트의 특정 레코드를 가공해서 출력하는 명령어이다.

awk [option] 'pattern { action }' argument

awk는 텍스트를 행(레코드) 단위로 인식한다. 각 레코드에 있는 텍스트들은 공백 문자로 구분된 필드들로 분류된다.

$ ls -al | grep hello | awk '{print $9}'
hello.txt

$ ls -al | awk '/hello/{print $9}'
hello.txt

위 두 명령어는 모두 ls 명령어를 통해 주어진 입력에서 hello가 들어간 행(레코드)을 고른 후 9번째 필드를 출력하는 명령어이다.

pattern

정규표현식은 /pattern/ 형태로 사용할 수 있다.

패턴에는 C언어와 유사한 구조의 코드를 넣는것도 가능하다.

awk 'if (<condition>) <statement>; {print $0}'

action

명령어 + argument의 구조로 되어 있으며, 각 필드는 $1, $2, …처럼 표현한다.

임의의 문자를 출력하고 싶으면 쌍따옴표를 사용하면 된다.

$ ls -al | awk '/hello/{print"filename : "$9}'
filename : hello.txt

생략이 가능하며, 생략시 기본 액션인 print가 실행된다.

ls -al | awk '/hello/'
  • 명령어
    • print : 텍스트 출력
    • printf : 특정 포맷에 맞게 출력
    • length : 문자열 길이 확인, pattern에서도 사용 가능

argument

파일명이나 텍스트가 들어간다.

xargs

명령어의 인자(argument)를 동적으로 생성하여 전달하는 명령어이다.

command | xargs [options] [command]
$ ls -al | awk '/hello/{print $9}' | xargs cat # 결과적으로 cat hello.txt와 같다.
Hello World
Apple Banana

위 명령은 두번째 파이프라인에서 hello.txt를 전달받아서 cat 명령어로 실행하는 명령이다.

option

  • -t : 실행되기 전 실행할 커맨드를 출력한다.
    $ ls -al | awk '/hello/{print $9}' | xargs -t cat
    cat hello.txt
    Hello World
    Apple Banana
  • -p : 실행되기전 실행여부를 확인하도록 한다.
    $ ls -al | awk '/hello/{print $9}' | xargs -p cat
    cat hello.txt ?...y
    Hello World
    Apple Banana

출처

  1. 리눅스 awk 명령어 사용법. (Linux awk command) - 리눅스 파일 텍스트 데이터 검사, 조작, 출력.

0개의 댓글