jrow
사용법
jrow -c config [-d delimiter] [-H][-x char][-w width]] [file]
jrow -G string:col[:desc] [-G string:col[:desc]]... [-d delimiter] [-H][-x char][-w width] [file]
jrow -V
Options are as follows:
-? print this help
-c config specify configuration file which has contents of -G options
-G string:col[:desc] select data column (multiple choice)
-d delimiter input field delimiter; def: whitespace
-H print header line
-w width specify the width of data; default: 8
-x char replace the specified character with a space
file data file; If file is omitted, the standard input is used.
EXAMPLE)
# jrow -H -G Kernel:4 -G Anon:4 -G Exec:6 -G cachelist:5 -G freelist:5 memstat.log
# jrow -H -G tcpCurrEstab:2 -G tcpInSegs:2 -G tcpOutSegs:4 -G tcpOutDataBytes:4 -G tcpInInorderBytes:4 -x = netstat-s.log
설명
jrow 명령어는 지정한 입력 파일에서 -G 옵션에 지정한 문자열(string)을 가지고 있는 라인을 찾이서 그 라인에서
지정한 컬럼 번호(col)에 있는 값을 한 줄에 출력한다.
컬럼의 구분은 디폴트로 White-space가 사용되며, -d 옵션으로 특정 문자로 변경할 수 있다.
-G 옵션을 여러 번 지정할 수 있고, -G 옵션에 지정한 컬럼 데이타를 한줄에 출력한다.
다음은 memstat.sh 쉘 스크립트를 사용하여 시스템의 물리적 메모리 사용률 수집한다.
# cat memstat.sh
while true
do
echo "DATE `date`"
echo ::memstat | mdb -k
sleep 60
done
# ksh memstat.sh > memstat.log
^C# <-- <Ctrl-C>
|
수집한 데이타는 다음과 같다.
# head -20 memstat.log
DATE Sun Feb 14 23:24:49 KST 2019
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 51993 203 10%
Anon 51353 200 12%
Exec and libs 7085 27 1%
Page cache 14390 56 3%
Free (cachelist) 28932 113 6%
Free (freelist) 368373 1438 71%
Total 522126 2039
DATE Sun Feb 14 23:24:50 KST 2019
Page Summary Pages MB %Tot
------------ ---------------- ---------------- ----
Kernel 51993 203 10%
Anon 51353 200 12%
Exec and libs 7085 27 1%
Page cache 14390 56 3%
Free (cachelist) 28932 113 6%
Free (freelist) 368373 1438 71%
|
이렇게 수집된 데이타에 대하여 다음과 같이 jrow 명령어로 필요한 부분을 발췌해서 한 줄로 출력할 수 있다.
# jrow -H -G DATE:5 -G Kernel:4 -G Anon:4 -G Exec:6 -G cachelist:5:Cache-free -G freelist:5:Free-free memstat.log
DATE Kernel Anon Exec Cache-free Free-free
23:24:00 10% 12% 1% 6% 71%
23:24:00 10% 12% 1% 6% 71%
23:25:00 10% 10% 1% 6% 71%
23:26:00 10% 13% 1% 6% 71%
23:27:00 10% 14% 1% 6% 71%
23:28:00 10% 19% 1% 6% 71%
23:29:00 10% 20% 1% 6% 71%
23:30:00 10% 17% 1% 6% 71%
23:31:00 10% 12% 1% 6% 71%
23:32:00 10% 16% 1% 6% 71%
23:33:00 10% 11% 1% 6% 71%
... skip ...
|
다음은 -G 옵션에 대한 설명이다.
-G 옵션은 콜론(:)으로 분리된 3개의 문자열을 지정할 수 있다.
첫번째 문자열은 입력 파일에서 찾을 문자열을 지정하고,
두번째 문자열은 추출할 컴럼을 지정하고,
세번째 문자열은 생략 가능하며, -H 옵션을
지정할 때, 출력될 헤더로 사용된다. 세번째 문자열을 지정하지 않으면, 두번째 문자열이 사용된다.
-G string:col[:desc]
-G =string:col[:desc]
-G col~string:col[:desc]
-G col~=string:col[:desc]
예제)
-G Kernel:4
-G Kernel:4:K-Mem
-G =Kernel:4:K-Mem
-G 1~Kernel:4:K-Mem
-G 1~=Kernel:4:K-Mem
첫번째 문자열은 다음과 같이 입력 파일에서 조사할 컬럼 번호를 지정할 수 있다.
column~[=]string
-G Kernel:4
|
컬럼 번호를 지정하지 않고 Kernel 이라고 지정하면, 전체 컬럼 중에서 Kernel이라는 문자를 포함하고 있는
라인을 찾아서 4번째 컬럼에 있는 값을 출력한다.
|
-G =Kernel:4
|
컬럼 번호를 지정하지 않고, 문자열 앞에 '=' 문자를 정하면,
컬럼에 포함된 것을 찾는 것이 아니고 정확히 일치하는 것을 찾아서
4번째 컬럼에 있는 값을 출력한다.
|
-G 1~Kernel:4
|
특정 컬럼에서 지정한 문자열을 찾으려면, 컬럼 번호를 지정하고 틸드(~)루 구분한 다음에 문자열을 지정하면 된다.
-G 1~Kernel:4 는 첫번째 컬럼에 Kernel 이라는 문자열을 포함하고 있는 라인을 찾아서 4번째 컬럼에 있는 값을 출력한다.
|
-G 1~=Kernel:4
|
-G 1~=Kernel:4 는 첫번째 컬럼에 Kernel 이라는 문자열과 정확히 일치하는 라인을 찾아서 4번째 컬럼에 있는 값을 출력한다.
|
다음은 netstat -s 명령어를 60초 간격으로 실행한 결과를 파일로 저장하여,
tcpCurrEstab, tcpInSegs, tcpOutSegs, tcpOutDataBytes, tcpInInorderBytes 의 값을 추출하여 추출된
데이타를 컬럼화하여 라인 별로 출력한다.
# cat netstat-s.sh
while true
do
netstat -s
sleep 60
done
# ksh netstat-s.sh > netstat-s.log
^C# <-- <Ctrl-C>
|
수집한 데이타는 다음과 같다.
# head -20 netstat-s.log
RAWIP rawipInDatagrams = 0 rawipInErrors = 0
rawipInCksumErrs = 0 rawipOutDatagrams = 0
rawipOutErrors = 0
UDP udpInDatagrams = 67 udpInErrors = 0
udpOutDatagrams = 855 udpOutErrors = 0
TCP tcpRtoAlgorithm = 4 tcpRtoMin = 400
tcpRtoMax = 60000 tcpMaxConn = -1
tcpActiveOpens = 9 tcpPassiveOpens = 425
tcpAttemptFails = 5 tcpEstabResets = 1
tcpCurrEstab = 5 tcpOutSegs =149201
tcpOutDataSegs =145181 tcpOutDataBytes =19398587
tcpRetransSegs = 0 tcpRetransBytes = 0
tcpOutAck = 4019 tcpOutAckDelayed = 2328
tcpOutUrg = 0 tcpOutWinUpdate = 0
tcpOutWinProbe = 0 tcpOutControl = 863
tcpOutRsts = 6 tcpOutFastRetrans = 0
tcpInSegs =178963
tcpInAckSegs =117456 tcpInAckBytes =19398951
tcpInDupAck = 423 tcpInAckUnsent = 0
tcpInInorderSegs = 92447 tcpInInorderBytes =5254506
tcpInUnorderSegs = 0 tcpInUnorderBytes = 0
tcpInDupSegs = 0 tcpInDupBytes = 0
tcpInPartDupSegs = 0 tcpInPartDupBytes = 0
tcpInPastWinSegs = 0 tcpInPastWinBytes = 0
tcpInWinProbe = 0 tcpInWinUpdate = 0
tcpInClosed = 1 tcpRttNoUpdate = 0
|
# jrow -H -G tcpCurrEstab:2 -G tcpInSegs:2 -G tcpOutSegs:4 -G tcpOutDataBytes:4 -G tcpInInorderBytes:4 -x = netstat-s.log
tcpCurrEstab tcpInSegs tcpOutSegs tcpOutDataBytes tcpInInorderBytes
5 178963 149201 19398587 5254506
5 179140 149460 19702975 5256622
5 179202 149495 19704795 5258442
5 179710 150416 20915863 5260678
5 180310 151550 22428839 5262310
5 180915 152684 23941727 5263942
6 181542 153836 25460121 5268086
6 182137 154966 26972921 5269446
6 182740 156097 28485769 5270874
6 183366 157261 30029029 5273434
|
위의 jrow 명령어에 '-x =' 옵션이 사용되었는데, -x 옵션에 지정된 문자는 SPACE 문자로 교체되어서
컬럼을 구분하는데 영향을 주기위해 사용된다.
다음은 jrow 명령어의 옵션이다.
옵션 | 설명 |
-c config |
-c 옵션을 사용하여 -G 옵션에 지정할 내용을 한줄에 한개씩 넣어서 구성 파일을 만들어 사용할 수 있다.
# jrow -H -G tcpCurrEstab:2 -G tcpInSegs:2 -G tcpOutSegs:4 -G tcpOutDataBytes:4 -G tcpInInorderBytes:4 -x = netstat-s.log
|
아래와 같이 config.txt 파일을 만들어 -c config.txt 옵션을 사용하면, 위의 명령어와 같은 결과를 가진다.
# jrow -H -c config.txt -x = netstat-s.log
|
config.txt 파일의 내용은 다음과 같다.
# cat config.txt
tcpCurrEstab:2
tcpInSegs:2
tcpOutSegs:4
tcpOutDataBytes:4
tcpInInorderBytes:4
|
|
구성 파일에서 공백 라인은 무시하고, '#' 문자는 주석으로 처리된다.
|
-d delimiter |
-d 옵션을 지정하지 않으면, 컬럼의 구분자로 white-space (SPACE and TAB)을 사용한다.
연속되는 white-space 는 하나로 간주한다.
-d 옵션에 컬럼의 구분자로 사용될 하나의 문자를 지정할 수있다.
|
-G string:col[:desc] |
-G 옵션은 콜론(:)으로 분리된 3개의 문자열을 지정할 수 있다.
첫번째 문자열은 입력 파일에서 찾을 문자열을 지정하고,
두번째 문자열은 추출할 컴럼을 지정하고, 세번째 문자열은 생략 가능하며, -H 옵션을 지정할 때, 출력될 헤더로 사용된다.
세번째 문자열을 지정하지 않으면, 두번째 문자열이 사용된다.
첫번째 문자열은 다음과 같이 입력 파일에서 조사할 컬럼 번호를 ~(틸드)로 구분하여 지정할 수 있다.
column~[=]string
문자열 앞에 = (equal) 문자를 지정하면, 해당 컬럼에서 지정한 문자열과 정확히 일치하는 라인을 찾는다.
= (equal) 문자를 사용하지 않으면, 해당 컬럼에서 문자열이 포함되어 있는 것을 찾는다.
컬럼 번호를 지정하지 않으면, 전체 컬럼 중에 지정한 문자열이 있는 것을 찾는다.
|
-H |
-H 옵션을 지정하면, 출력하는 데이타에 헤더 정보를 보여준다.
|
-w width |
-w 옵션을 사용하여 출력되는 컬럼의 폭을 지정할 수 있다.
디폴트는 8 이다. 해더를 출력할 경우에 헤드의 글자 폭은 -w 에 지정한 폭 보다 클 경우,
헤더의 폭은 크기만큼 유지된다.
|
-x char |
입력되는 데이타에서 -x 옵션에 지정한 문자를 공백으로 교체한 다음에 컬럼을 구분한다.
|
-V |
-V 옵션을 지정하면, 명령어의 버전 정보를 보여준다.
|
|