목차
1. awk 명령어
1. awk program 파일로부터 awk program을 실행
# awk [options] -f awkProgramFile file ...
2. awk program 파일 없이 awk program을 실행
awkProgram = 'Patterns {Actions}'
# awk [options] 'awkProgram' file ...
# awk [options] 'Patterns {Actions}' file ...
• 텍스트 형태로 되어있는 입력 데이터를 행과 단어(필드) 별로 처리해 출력하는 명령어
• awk 명령어를 이용해 해당 파일의 데이터를 분류(레코드, 필드) 후, 분류된 텍스트를 바탕으로 데이터 조작 및 연산, 조건 검사 등을 수행 후 출력하는 명령어(프로그래밍 언어, 텍스트 프로세싱 기능)
• AWK라는 명령어 이름은 명령어를 만든 Aho + Weinberger + Kernighan 이름의 앞 글자를 따서 붙여졌습니다.
• awk는 데이터를 조작할 수 있어 쉘 스크립트에서 사용되는 필수 툴이며, 작은 데이터베이스를 관리하기 위해서도 필수입니다.
• perl 언어 등장 이후로, awk는 길어지면 복잡해져 사용빈도가 급격히 줄었습니다.
• one-liner(한 줄로 작성하여 동작하는 프로그램)로서 많이 쓰입니다.
1.1. 레코드와 필드
[레코드]
• awk는 기본적으로 입력 데이터를 라인(line) 단위의 레코드(Record)로 인식합니다. ($0 = 레코드)
• 레코드는 $0로 접근할 수 있습니다.
• NR(total number of record so far) 변수 : 각 레코드들의 번호는 awk의 Built-in Variables 변수 NR에 저장됩니다.
# cat awk_ex
aapl apple nasdaq 37% $146.8300
msft microsoft nasdaq 32% $299.5600
tsla tesla nasdaq 16% $753.6400
nvda nvidia nasdaq 70% $224.8200
net cloudflare nyse 224% $135.6700
qld proetf_ultra_qqq nyse 2% $79.2000
# awk '{print NR}' awk_ex
1
2
3
4
5
6
[필드]
• 각 레코드에 들어 있는 텍스트는 공백 문자(space, tab)로 구분된 필드(Field)들로 분류됩니다.
• 필드는 구분자로 분리되며 $1부터 $n(필드 개수)를 이용해 접근할 수 있습니다.
• NF(the number of fields) 변수 : 총필드의 수를 awk의 Built-in Variables 변수 NF에 저장되고, 라인당 100개의 필드를 가질 수 있다.
# awk '{print NF}' awk_ex
5
5
5
5
5
5
[필드 분리자]
• 필드 분리자는 awk의 Built-in Variables 변수 FS에 저장되고 기본 값은 공백과 탭입니다.
• -F옵션을 사용해 FS(분리자) 값을 변경할 수 있습니다.
# cat awk_ex2
aapl:apple:nasdaq:37%:$146.8300
msft:microsoft:nasdaq:32%:$299.5600
tsla:tesla:nasdaq:16%:$753.6400
nvda:nvidia:nasdaq:70%:$224.8200
net:cloudflare:nyse:224%:$135.6700
qld:proetf_ultra_qqq:nyse:2%:$79.2000
# awk -F: '{ print $2 }' awk_ex2
apple
microsoft
tesla
nvidia
cloudflare
proetf_ultra_qqq
1.2. awk 명령어 작업 방식
• awk 명령어의 작업 처리 방식입니다.
결괏값
# cat awk_ex
aapl apple nasdaq 37% $146.8300
msft microsoft nasdaq 32% $299.5600
tsla tesla nasdaq 16% $753.6400
nvda nvidia nasdaq 70% $224.8200
net cloudflare nyse 224% $135.6700
qld proetf_ultra_qqq nyse 2% $79.2000
# awk '$4 > 20 {print $0}' awk_ex
aapl apple nasdaq 37% $146.8300
msft microsoft nasdaq 32% $299.5600
nvda nvidia nasdaq 70% $224.8200
net cloudflare nyse 224% $135.6700
1.3. awk Options
• 다양한 옵션이 많지만 주요 옵션만 기술했습니다. 다른 옵션이 필요하면 man awk를 이용해 확인해주세요.
[OPTIONS]
-f program-file
--file program-file
: awk 프로그램 파일을 지정합니다.
-F fs
--field-separator fs
: 필드 구분 기호를 지정합니다. (지정한 구분 기호로 필드를 구분)
-v var=val
--assign var=val
: awk 프로그램에서 사용할 변수를 지정합니다.
-b
--characters-as-bytes
-c
--traditional
-C
--copyright
( ... ) 생략
1.4. awk Program
• awk Program은 스크립트 형식의 프로그래밍 언어로 작성되기 때문에, 작성 방법이 매우 다양합니다.
# awk [options] 'awkProgram' file ...
# awk [options] 'Patterns {Actions}' file ...
[awk 입력 파일 처리 형태]
1. 파일을 한 줄씩(레코드) 스캔합니다.
2. 각 레코드를 구분자에 따라(space, tab 등) 필드로 나눕니다.
3. 레코드와 필드를 패턴과 비교합니다. = 'Patterns {Actions}'
4. 일치하는 줄에서 작업을 수행합니다. = 'Patterns {Actions}'
5. 이러한 과정을 입력 파일의 끝이 나올 때까지 수행합니다.
[생략]
• pattern과 action은 모두 생략이 가능합니다.
• pattern을 생략
: 매칭 여부를 검사할 문자열 패턴 정보가 없기 때문에 모든 레코드가 선택됩니다.
• action을 생략
: 기본 액션인 print가 실행됩니다.
• 패턴과 액션 생략 예시입니다. | (파이프라인)을 이용해서 사용할 수도 있습니다.
# ps -f
UID PID PPID C STIME TTY TIME CMD
root 5046 13140 0 18:35 pts/1 00:00:00 sleep 1
root 5047 19050 0 18:35 pts/1 00:00:00 ps -f
root 13140 19050 0 13:57 pts/1 00:00:22 sh test.sh
root 19050 19032 0 11:46 pts/1 00:00:02 -bash
[pattern 생략]
# ps -f | grep -v awk | awk '{print}'
UID PID PPID C STIME TTY TIME CMD
root 5263 13140 0 18:35 pts/1 00:00:00 sleep 1
root 5264 19050 0 18:35 pts/1 00:00:00 ps -f
root 13140 19050 0 13:57 pts/1 00:00:22 sh test.sh
root 19050 19032 0 11:46 pts/1 00:00:02 -bash
[action 생략]
# ps -f | grep -v awk | awk '/sleep 1/'
root 5414 13140 0 18:36 pts/1 00:00:00 sleep 1
1.4.1. Built-in Variables(내장 변수)
• 특수 목적으로 미리 정의된 변수입니다. 자주 사용하는 변수만 기술했습니다. 더 자세한 내용은 man awk를 참조해주세요.
[내장 변수]
FS
: 필드 구분 문자 (default = space)
NF
: 레코드의 필드 개수
NR
: 현재 레코드의 순서 값
FNR
: 현재 파일에서 현재 레코드의 순서 값(다수의 파일을 처리할 때 사용)
RS
: 레코드 구분 문자 (default = newline)
OFMT
: 숫자의 출력 형식 제어 (printf와 비슷함) (default = %.6g)
OFS
: 결과 출력 시 필드 구분 문자 (default = space)
ORS
: 결과 출력 시 레코드 구분 문자 (default = newline)
FILENAME
: 경로 포함한 파일명
CONVFMT
: 문자열 숫자를 숫자로 변환 형식 (default = %.6g)
RLENGTH
: match()와 일치하는 문자열의 길이. 일치하는 항목이 없으면 -1입니다.
RSTART
: match()와 일치하는 첫 번째 문자의 인덱스; 일치하지 않으면 0입니다. (인덱스는 1에서 시작
1.4.2. Patterns
[Patterns]
BEGIN
END
BEGINFILE
ENDFILE
/regular expression/
relational expression
pattern && pattern
pattern || pattern
pattern ? pattern : pattern
(pattern)
! pattern
pattern1, pattern2
1.4.3. etc
• 그 외에 다양한 프로그래밍적 요소(함수, 연산자, 입/출력 등이 있습니다.)
[수학 함수]
atan2(y, x), cos(expr), exp(expr), int(expr), log(expr),
rand(), sin(expr), sqrt(expr), srand([expr]),
( ... ) 생략
[문자열 함수]
asort(s [, d [, how] ]), asorti(s [, d [, how] ]), index(s, t),
match(s, r [, a]) , split(s, a [, r [, seps] ]), substr(s, i [, n])
( ... ) 생략
[시간 함수]
mktime(datespec), systime(), strftime([format [, timestamp[, utc-flag]]])
[사용자 정의 함수]
function name(parameter list) { statements }
function f(p, q, a, b) # a and b are local
{
...
}
/abc/ { ... ; f(1, 2) ; ...
[연산자]
$
: Field reference.
++ --
: Increment and decrement, both prefix and postfix.
^
: Exponentiation (** may also be used, and **= for the assignment operator).
+ - !
: Unary plus, unary minus, and logical negation.
* / %
: Multiplication, division, and modulus.
+ -
: Addition and subtraction.
~ !~
: Regular expression match, negated match.
&&
: Logical AND.
||
: Logical OR.
= += -= *= /= %= ^=
< > <= >= != ==
( ... ) 생략
[제어문]
if (condition) statement [ else statement ]
while (condition) statement
do statement while (condition)
for (expr1; expr2; expr3) statement
for (var in array) statement
break
continue
( ... ) 생략
[입출력]
getline
printf
( ... ) 생략
2. awk 예제
• 예제로 사용할 파일 내용입니다.
# cat awk_ex
AAPL APPLE NASDAQ 37% 146.8300
msft microsoft nasdaq 32% 299.5600
tsla tesla nasdaq 16% 753.6400
nvda nvidia nasdaq 70% 224.8200
net cloudflare nyse 224% 135.6700
qld proetf_ultra_qqq nyse 2% 79.2000
# cat awk_ex2
AAPL:APPLE:NASDAQ:37%:146.8300
msft:microsoft:nasdaq:32%:299.5600
tsla:tesla:nasdaq:16%:753.6400
nvda:nvidia:nasdaq:70%:224.8200
net:cloudflare:nyse:224%:135.6700
qld:proetf_ultra_qqq:nyse:2%:79.2000
# cat number
20 50 70 80 20
30 50 70 40 60
80 90 80 50 40
50 10 40 60 20
# cat awk_program.script
{
if(NR==1) max=$5
}
{
if($5>max)max=$5
}
END{
print max+0
}
2.1. 원하는 필드 값 출력
[연산자]
$
: Field reference.
[이스케이프 시퀀스]
\b 백스페이스
\n 줄 바꿈, 개행
\t 수평 탭
\v 수직 탭
원하는 n번 필드 값 출력(1~n)
print $n;
# awk '{print $n }' file
[파일 출력]
[1,5번 필드 출력]
# awk '{print $1,$5}' awk_ex
AAPL 146.8300
msft 299.5600
tsla 753.6400
nvda 224.8200
net 135.6700
qld 79.2000
[\t 수평 탭]
# awk '{print $1 "\t" $5}' awk_ex
AAPL 146.8300
msft 299.5600
tsla 753.6400
nvda 224.8200
net 135.6700
qld 79.2000
[임의의 문자열 추가(포함)하기]
# awk '{print "company: "$1, "\t", "price: "$5}' awk_ex
company: AAPL price: 146.8300
company: msft price: 299.5600
company: tsla price: 753.6400
company: nvda price: 224.8200
company: net price: 135.6700
company: qld price: 79.2000
[다른 명령어와 활용 - 파이프라인]
[테스트를 위한 작업]
sleep 50000 &
sleep 50001 &
sleep 50002 &
sleep 50003 &
sleep 50004 &
[프로세스 원하는 정보만 출력]
# ps -ef | grep sleep | grep -v grep | awk '{print "PID: " $2 "\t" "COMMAND: " $8, $9}'
PID: 14979 COMMAND: sleep 50000
PID: 14980 COMMAND: sleep 50001
PID: 14981 COMMAND: sleep 50002
PID: 14982 COMMAND: sleep 50003
PID: 14984 COMMAND: sleep 50004
PID: 15280 COMMAND: sleep 60
PID: 15501 COMMAND: sleep 10
[netstat 원하는 정보만 출력]
# netstat -ntap | grep sshd | awk '{print "Local Address: " $4, "\t","State: " $6}'
Local Address: 0.0.0.0:22 State: LISTEN
Local Address: 127.0.0.1:6010 State: LISTEN
Local Address: 192.168.50.14:22 State: ESTABLISHED
Local Address: 192.168.50.14:22 State: ESTABLISHED
Local Address: 192.168.50.14:22 State: ESTABLISHED
Local Address: :::22 State: LISTEN
Local Address: ::1:6010 State: LISTEN
2.2. 원하는 레코드 값 출력
$0 = 레코드
[Built-in Variables]
NR(total number of record so far)
: 현재 레코드의 순서 값
[전체 레코드 출력]
# awk '{print $0}' 파일명
[원하는 레코드 출력]
: 연산자나 제어문을 이용(프로그래밍 언어)
: exit를 이용해 원하는 n번 레코드 출력 후 작업 stop
# awk 'NR == n {print $0; exit}' 파일명
: 짝수 레코드
# awk 'NR%2 == 0 {print $0}' 파일명
: 홀수 레코드(1=true)
# awk 'NR%2 {print $0}' 파일명
# awk 'NR == 2 {print NR,$0; exit}' awk_ex
2 msft microsoft nasdaq 32% 299.5600
# awk 'NR%2 == 0 {print NR,$0}' awk_ex
2 msft microsoft nasdaq 32% 299.5600
4 nvda nvidia nasdaq 70% 224.8200
6 qld proetf_ultra_qqq nyse 2% 79.2000
# awk 'NR%2 {print NR,$0}' awk_ex
1 AAPL APPLE NASDAQ 37% 146.8300
3 tsla tesla nasdaq 16% 753.6400
5 net cloudflare nyse 224% 135.6700
# awk 'NR > 2 && NR < 6 {print NR, $0}' awk_ex
3 tsla tesla nasdaq 16% 753.6400
4 nvda nvidia nasdaq 70% 224.8200
5 net cloudflare nyse 224% 135.6700
2.3. 원하는 데이터 출력하기
• 패턴에 정규 표현식(Regular Expression)을 사용하여 원하는 패턴을 검사할 수 있습니다.
# awk '/regex/' 파일명
# awk '/APPLE/' awk_ex
AAPL APPLE NASDAQ 37% 146.8300
# awk '/APPLE/ {print $1}' awk_ex
AAPL
# awk '/^n/ {print $0}' awk_ex
nvda nvidia nasdaq 70% 224.8200
net cloudflare nyse 224% 135.6700
# awk '/[[:lower:]]/ {print $0}' awk_ex
msft microsoft nasdaq 32% 299.5600
tsla tesla nasdaq 16% 753.6400
nvda nvidia nasdaq 70% 224.8200
net cloudflare nyse 224% 135.6700
qld proetf_ultra_qqq nyse 2% 79.2000
# awk '/[[:upper:]]/ {print $0}' awk_ex
AAPL APPLE NASDAQ 37% 146.8300
2.4. 원하는 데이터 출력 (필드 값 문자열 검사)
• 특정 필드 문자열 패턴 검사
: match($필드, /패턴/) 이용
: ~ 연산자 이용 (정규식 연산자)
# awk 'match($n, /regex/) {print $0}' 파일명
# awk '$n ~ /regex/ {print $0}' 파일명
# awk 'match($3,/nas*/) {print $0}' awk_ex
msft microsoft nasdaq 32% 299.5600
tsla tesla nasdaq 16% 753.6400
nvda nvidia nasdaq 70% 224.8200
# awk '$3 ~ /nas*/ {print $0}' awk_ex
msft microsoft nasdaq 32% 299.5600
tsla tesla nasdaq 16% 753.6400
nvda nvidia nasdaq 70% 224.8200
# awk '!match($3,/nas*/) {print $0}' awk_ex
AAPL APPLE NASDAQ 37% 146.8300
net cloudflare nyse 224% 135.6700
qld proetf_ultra_qqq nyse 2% 79.2000
# awk '$3 !~ /nas*/ {print $0}' awk_ex
AAPL APPLE NASDAQ 37% 146.8300
net cloudflare nyse 224% 135.6700
qld proetf_ultra_qqq nyse 2% 79.2000
2.5. 출력 너비 지정하기
• printf를 이용해 지저분한 출력을 이쁘게 출력할 수 있습니다.
• 출력 포맷은 C 언어와 동일합니다.
# df -h | awk '{print $1, $5}'
Filesystem Use%
devtmpfs 0%
tmpfs 0%
tmpfs 4%
tmpfs 0%
/dev/mapper/centos-root 11%
/dev/sda1 19%
/dev/mapper/centos-home 1%
tmpfs 1%
tmpfs 0%
# df -h | awk '{printf "%-30s %-3s \n", $1, $5}'
Filesystem Use%
devtmpfs 0%
tmpfs 0%
tmpfs 4%
tmpfs 0%
/dev/mapper/centos-root 11%
/dev/sda1 19%
/dev/mapper/centos-home 1%
tmpfs 1%
tmpfs 0%
# df -h | awk '{printf "%30s %3s \n", $1, $5}'
Filesystem Use%
devtmpfs 0%
tmpfs 0%
tmpfs 4%
tmpfs 0%
/dev/mapper/centos-root 11%
/dev/sda1 19%
/dev/mapper/centos-home 1%
tmpfs 1%
tmpfs 0%
2.6. 특정 필드의 합 출력
# awk '{ price_sum += $5 }; END { print "TOTAL_PRICE : $"price_sum }' awk_ex
TOTAL_PRICE : $1639.72
2.7. 특정 필드 기준으로 레코드 중 최솟값, 최댓값 출력(세로의 최솟값, 최댓값)
# cat awk_ex
AAPL APPLE NASDAQ 37% 146.8300
msft microsoft nasdaq 32% 299.5600
tsla tesla nasdaq 16% 753.6400
nvda nvidia nasdaq 70% 224.8200
net cloudflare nyse 224% 135.6700
qld proetf_ultra_qqq nyse 2% 79.2000
[최솟값]
# awk 'NR==1{min=$5} $5<min{min=$5} END{print min+0}' awk_ex
또는
# awk '{if(NR==1) min=$5} {if($5<min) min=$5} END{print min+0}' awk_ex
753.64
[최댓값]
# awk 'NR==1{max=$5} $5>max{max=$5} END{print max+0}' awk_ex
또는
# awk '{if(NR==1) max=$5} {if($5>max)max=$5} END{print max+0}' awk_ex
79.2
# awk 'NR==1{max=$5; min=$5} $5>max{max=$5} $5<min{min=$5} END{print "max: "max+0, "\t min: "min+0}' awk_ex
max: 753.64 min: 79.2
2.8. 필드 중 최솟값, 최댓값 구하기(가로의 최솟값, 최댓값)
# cat number
20 50 70 80 20
30 50 70 40 60
80 90 80 50 40
50 10 40 60 20
[최솟값]
# awk '{min = $1; for(i=1; i<=NF; i++) if($i < min) min = $i; print min}' number
20
30
40
10
[최댓값]
# awk '{max = $1; for(i=1; i<=NF; i++) if($i > max) max = $i; print max}' number
80
70
90
60
2.8. 특정 필드 기준으로 정렬
| sort를 사용해 정렬합니다.
• awk 프로그램에서 파이프를 오픈하고 다른 파이프를 오픈하기 전에 기존 파이프는 닫아야 합니다.
• 파이프 심벌의 오른쪽 명령은 큰따옴표(““)로 둘러싸야합니다.
[options]
-k : 필드 번호
-g : 숫자일 경우
-r : 내림차순 (default 오름차순)
-t "구분자"
[1번 필드 오름차순 정렬]
# awk '{print $0 | "sort -k 1"} END{close("sort -k 1")}' awk_ex
AAPL APPLE NASDAQ 37% 146.8300
msft microsoft nasdaq 32% 299.5600
net cloudflare nyse 224% 135.6700
nvda nvidia nasdaq 70% 224.8200
qld proetf_ultra_qqq nyse 2% 79.2000
tsla tesla nasdaq 16% 753.6400
[1번 필드 내림차순 정렬]
# awk '{print $0 | "sort -k 1 -r"} END{close("sort -k 1 -r")}' awk_ex
tsla tesla nasdaq 16% 753.6400
qld proetf_ultra_qqq nyse 2% 79.2000
nvda nvidia nasdaq 70% 224.8200
net cloudflare nyse 224% 135.6700
msft microsoft nasdaq 32% 299.5600
AAPL APPLE NASDAQ 37% 146.8300
[5번 필드 오름차순 정렬(숫자)]
# awk '{print $0 | "sort -k 5 -g"} END{close("sort -k 5 -g")}' awk_ex
qld proetf_ultra_qqq nyse 2% 79.2000
net cloudflare nyse 224% 135.6700
AAPL APPLE NASDAQ 37% 146.8300
nvda nvidia nasdaq 70% 224.8200
msft microsoft nasdaq 32% 299.5600
tsla tesla nasdaq 16% 753.6400
[5번 필드 내림차순 정렬(숫자)]
# awk '{print $0 | "sort -k 5 -g -r"} END{close("sort -k 5 -g -r")}' awk_ex
tsla tesla nasdaq 16% 753.6400
msft microsoft nasdaq 32% 299.5600
nvda nvidia nasdaq 70% 224.8200
AAPL APPLE NASDAQ 37% 146.8300
net cloudflare nyse 224% 135.6700
qld proetf_ultra_qqq nyse 2% 79.2000
2.9. BEGIN, END
[Patterns]
# awk 'BEGIN {} {} END {}' 파일명
# awk 'BEGIN{print "[BEGIN CODE HERE]"}; {print $0}; END{print "[END CODE HERE]"}' awk_ex
[BEGIN CODE HERE]
AAPL APPLE NASDAQ 37% 146.8300
msft microsoft nasdaq 32% 299.5600
tsla tesla nasdaq 16% 753.6400
nvda nvidia nasdaq 70% 224.8200
net cloudflare nyse 224% 135.6700
qld proetf_ultra_qqq nyse 2% 79.2000
[END CODE HERE]
2.10. 필드 구분자 변경하기
# awk -F 구분자 'awk Program' 파일명
# cat awk_ex2
AAPL:APPLE:NASDAQ:37%:146.8300
msft:microsoft:nasdaq:32%:299.5600
tsla:tesla:nasdaq:16%:753.6400
nvda:nvidia:nasdaq:70%:224.8200
net:cloudflare:nyse:224%:135.6700
qld:proetf_ultra_qqq:nyse:2%:79.2000
# awk -F : '{print $1, $5}' awk_ex2
AAPL 146.8300
msft 299.5600
tsla 753.6400
nvda 224.8200
net 135.6700
qld 79.2000
# awk -F : '{printf "%-10s %-20s \n", $1, $5}' awk_ex2
AAPL 146.8300
msft 299.5600
tsla 753.6400
nvda 224.8200
net 135.6700
qld 79.2000
2.11. 파일로 저장된 awk 프로그램 실행
# awk -f 프로그램파일명 'awk Program' 파일명
# cat awk_program.script
{
if(NR==1) max=$5
}
{
if($5>max)max=$5
}
END{
print max+0
}
# awk -f awk_program.script awk_ex
753.64
2.10. 리다이렉션(>, >>)
• 파일명은 큰따옴표로 둘러쌰아 합니다.
# awk '{printf "%-5s %-5s %-20s \n", $1, $4, "$"$5 > "new_file"}' awk_ex
# cat new_file
AAPL 37% $146.8300
msft 32% $299.5600
tsla 16% $753.6400
nvda 70% $224.8200
net 224% $135.6700
qld 2% $79.2000
2.11. 프로세스 이름으로 KILL
[쉘 스크립트에서의 쿼테이션과 백 틱]
' (single quotation)
: ' ~ ' 안에서는 문법을 무시합니다. ($ no)
" (double quotation)
: " ~ " 안에서는 문법을 허용합니다. ($ ok)
` (backtick)
: 일반적으로 키보드 왼쪽 Tab 위에 위치하고 있습니다.
: ` ~ ` 안에서는 명령어가 실행 가능합니다.
[쿼테이션과 백 틱 차이 예시]
[변수 선언]
# var=3
[single quotation 변수 출력]
# echo '$var'
$var
[double quotation 변수 출력]
# echo "$var"
3
[single quotation 명령어 사용]
# echo 'expr $var + 2'
expr $var + 2
[double quotation 명령어 사용]
# echo "expr $var + 2"
expr 3 + 2
[backtick 명령어 사용]
# echo `expr $var + 2`
5
[프로세스 이름으로 프로세스 KILL]
[1. 테스트를 위해 백그라운드 프로세스 생성]
# sleep 50000 &
# sleep 50001 &
# sleep 50002 &
# sleep 50003 &
# sleep 50004 &
[2. 해당 프로세스 확인]
# ps -ef | grep sleep | grep -v grep
root 14618 1349 0 18:55 pts/1 00:00:00 sleep 50000
root 14619 1349 0 18:55 pts/1 00:00:00 sleep 50001
root 14620 1349 0 18:55 pts/1 00:00:00 sleep 50002
root 14621 1349 0 18:55 pts/1 00:00:00 sleep 50003
root 14622 1349 0 18:55 pts/1 00:00:00 sleep 50004
root 14769 791 0 18:56 ? 00:00:00 sleep 60
root 14800 6438 0 18:56 ? 00:00:00 sleep 10
[3. 해당 프로세스의 PID만 출력]
# ps -ef | grep sleep | grep -v grep | awk '{print $2}'
14618
14619
14620
14621
14622
14769
[4. backtick을 이용해 kill]
# kill -9 `ps -ef | grep sleep | grep -v grep | awk '{print $2}'`
[1] 죽었음 sleep 50000 (wd: ~/awkFile)
(wd now: ~/server)
[2] 죽었음 sleep 50001 (wd: ~/awkFile)
(wd now: ~/server)
[3] 죽었음 sleep 50002 (wd: ~/awkFile)
(wd now: ~/server)
[4]- 죽었음 sleep 50003 (wd: ~/awkFile)
(wd now: ~/server)
[5]+ 죽었음 sleep 50004 (wd: ~/awkFile)
(wd now: ~/server)
'OS > Linux' 카테고리의 다른 글
[Linux] 리눅스 계정 관련 파일의 필드 정보 ( /etc/passwd ) (0) | 2021.10.05 |
---|---|
[Linux] 리눅스 시그널 명령어(프로세스 종료) - kill (0) | 2021.10.03 |
[Linux] 리눅스 프로세스 작업 전환 (Background, Foreground) (0) | 2021.09.22 |
[Linux] 서버 상태 확인 스크립트 (0) | 2021.09.21 |
[Linux] 리눅스 프로세스 상태 확인하기 - ps (0) | 2021.09.20 |