jsum

   jsum

  사용법


	jsum -H [-G fn] [-h][-1] [-S skiplist][-d delimiter][-f [-v]][-i][-z][-c][-s sep][-,][-U unit][-u num] [file]
	jsum -G fn [-h][-1] [-S skiplist][-d delimiter][-f [-v]][-i][-z][-c][-s sep][-,][-U unit][-u num] [file]
	jsum -p -G fn [-S skiplist][-d delimiter][-s sep][-,][-U unit][-u num] [file]
	jsum -l [-G fn] [-H][-h] [-S skiplist][-d delimiter][-f [-v]][-i][-z][-c][-s sep][-,][-U unit][-u num] [file]
	jsum -L fn [-K keyfield] [-H][-h] [-S skiplist][-d delimiter][-f [-v]][-i][-z][-c][-s sep][-,][-U unit][-u num] [file]
	jsum -V

	Options are as follows:

	-?               print this help
	-,               put commas between every three digits in decimal numbers
	-1               print result data line by line
	-c               accept comma separated value: ex) 12,000,0000
	-d delimiter     input field delimiter; def: whitespace
	-f               force to calculate unconditionally ignoring invalid number
	-G fn[,fn,...]   sum is calculated by columns; select field; exam) 1,2 ...
	-H               data file has header information
	-h               print column names, or line number if -l option used
	-i               regard input as integer value
	-K keyfield      specify key field number for -L option; def: 1
	-l               calculate sum line by line
	-L fn            calculate sum line by line with the same column name
	-p               print specified column data itself, not calculating
	-S skiplist      list starting word to skip (separated by comma)
	-s sep           output separater (default: TAB)
	-U unit          change the unit of output value: 'K' for kilobyte, 'M' for Megabyte, 'G' for Gigabyte
	-u num           specify the number of decimal places; num should be one of 1, 2 and 3; (default: 2)
	-v               verbose mode; print NOTE message for invalid input with -f option
	-V               show version
	-z               do not print zero value

	file             data file; If file is omitted, the standard input is used.
  설명

jsum 명령어는 지정한 파일이나 표준입력에서 데이타를 읽어서 지정한 컬럼 별 또는 라인 별로 합계를 구해준다. file을 지정하지 않으면 표준입력을 사용한다.

# cat bin.dat
-r-xr-xr-x   1 bin      bin        10492 Oct  6  1998 /usr/bin/keylogin
-r-xr-xr-x   1 bin      bin         5412 Oct  6  1998 /usr/bin/keylogout
-r-xr-xr-x   1 bin      bin         7068 Oct  6  1998 /usr/bin/kinit
-r-xr-xr-x   1 bin      bin         8376 Oct  6  1998 /usr/bin/klist
# jsum -G 5 bin.dat
31348
# jsum -G 2,5 bin.dat
4	31348

위의 예제에 있는 bin.dat 파일은 "ls -l" 명령어의 결과를 가지고 있다. 여기서 첫번째 예제는 5번째 필드의 값을 더하여 합계를 보여준다. 두번째 예제는 2번째 필드와 5번째 필드의 합계를 동시에 보여주는 예제이다. 계산하고 싶은 컬럼번호를 -G 옵션에 지정한다. 여러개를 동시에 보고 싶으면 콤마로 구분하여 여러 컬럼번호를 지정할 수 있다. 입력되는 컬럼의 구분은 white space(TAB 또는 SPACE)로 구분한다. 구분자를 다른 것으로 사용하고 싶으면 -d 옵션을 사용하여 컬럼 구분자를 지정할 수 있다.

다음은 라인 별로 합계를 구하는 예제이다. -l 옵션을 사용하면 각각의 라인에 있는 숫자를 모두 더하여 라인 별로 합계를 출력한다.

# cat exam.dat
120 10 29 10.001
99 89 12.1 10.02
20 20 10 10
20 20 20 20
# jsum -l exam.dat
169.001
210.12
60
80
# jsum -l -i exam.dat
169
210
60
80
# jsum -l -G 2,3 exam.dat2
39
101.1
30
40

합계를 구하는데 사용되는 데이타는 양수이어야 하고 반드시 숫자로 시작하여야 한다. 숫자가 아닐 경우에 오류가 발생한다.
숫자와 문자가 섞여 있을 때, 문자는 숫자의 끝으로 인식한다. 음수는 숫자로 인식하지 않는다.
-G 2,3 옵션을 지정하여 두번째와 세번째 데이타만 더하여 합계를 출력한다.

숫자는 64 bit로 계산한다. 따라서 최대값은 2^64(18446744073709551616) 이다. 이 보다 값이 커지게 되면 부정확한 값이 나온다.
소수점 이하의 숫자가 있을 경우, 소수점 이하 9 자리까지만 숫자로 인식한다.
소수점 이하를 계산하지 않으려면, -i 옵션을 사용하면 된다.

# cat psinfo.dat
Date.time 0312.21:54:37 proc 69 zomb 0 run 0 lwp 151 cpu 5.44% load1m 0.07 ptime 12380.73 hp+stk 67.35M
  PID USERNAME HP+STK S NLWP   WCPU%   CPU%  ELAPSED        TIME CMD
  272 guest    14.71M S    1   2.09%  2.09%   0d9430    02:10.63 Xsun
  722 guest    20.82M S    1   1.29%  1.29%   0d6194    01:35.28 netscape
 1808 guest    0.047M S    1   0.72%  0.72%   0d1103       01.39 vi
  391 guest    7.484M S    1   0.46%  0.46%   0d9360       21.02 dtterm
  330 guest    10.78M S   15   0.35%  0.35%   0d9378       22.10 java
 1821 root     0.117M O    1   0.29%  0.29%      0d0       00.06 psinfo
# jsum -S Date,PID -G 7 psinfo.dat
5.20
# jsum -H -G CPU% -S Da psinfo.dat
5.20
# jsum -H -G HP+STK,NLWP,CPU% -S Date psinfo.dat
53.958  20      5.20
# jsum -H -h -G HP+STK,NLWP,CPU% -S Date psinfo.dat
HP+STK  NLWP    CPU%
53.958  20      5.20
# jsum -H -1 -h -G HP+STK,NLWP,CPU% -S Date psinfo.dat
HP+STK  53.958
NLWP    20
CPU%   5.20

-S 옵션을 사용하면 합계를 구하는 데이타에서 제외하고 싶은 라인을 지정할 수 있다. 제외하고 싶은 라인의 시작하는 단어를 지정하면 된다(단어의 일부만 지정해도 된다). 여러 개를 지정할 경우 콤마(,)로 구분할 수 있다. -S Date,PID에서는 Date로 시작하는 라인과 PID로 시작하는 라인은 제외한다.

-S Date 만 지정하고 -H 옵션을 지정하면 유효한 첫번째 라인은 헤더정보로 사용되고, 이것은 -G 옵션에 사용될 수 있다.
-h 옵션을 지정하면 출력되는 값의 헤더 정보를 보여준다. 첫번째 줄에서는 헤더 정보가 출력되고 그 다음 줄에 합계 값이 출력된다.
-1 옵션을 지정하면, 열별로 출력한다.

# cat test.dat
Jun     host_a  13000
Feb     host_a  14000
Mar     host_a  15000
Jun     host_b  1600
Feb     host_b  2700
Mar     host_b  1200
Jun     host_c  900
Feb     host_c  800
Mar     host_c  700
# jsum -L 3 test.dat
Jun     15500
Feb     17500
Mar     16900
# jsum -L 3 -K 2 test.dat
host_a  42000
host_b  5500
host_c  2400

위의 예제에는 test.dat 파일을 사용하여 -L 옵션을 사용한 예제이다. -L 옵션이 사용되면 같은 이름을 가진 필드의 값을 합하여 출력한다.
-L 옵션으로 합계를 구할 필드를 지정하고 -K 옵션으로 같은 이름을 가지는 필드를 지정한다.
-K 옵션이 지정되지 않으면 첫번째 컬럼이 디폴트로 사용된다.

다음은 jsum 명령어의 옵션이다.

옵션설명
-1 -1 옵션을 지정하면 여러 컬럼을 출력할 때, 각 컬럼의 데이타를 한 라인씩 출력한다.
-, -, 옵션을 지정하면, 출력 값에 콤마(,) 표시를 함께 표시한다.
# echo 123456789 | jsum -l
123456789
# echo 123456789 | jsum -l -,
123,456,789

-c -c 옵션을 지정하면, 숫자 중간에 있는 콤마를 모두 무시하고 연속된 숫자로 인식한다. -c 옵션을 지정하지 않으면, 콤마는 숫자의 끝으로 인식한다.
# echo 10,000 20,001 | jsum -l
30
# echo 10,000 20,001 | jsum -l -c
30001

-d delimiter -d 옵션은 입력 데이타의 구분자를 지정한다. 이 옵션을 지정하지 않으면 white space(TAB or SPACE) 를 구분자로 사용한다. "-d ," 를 지정하면 입력 데이타의 구분자로 콤마를 사용한다.
delimiter는 문자 한개가 사용된다.
-f [-v] -f 옵션을 지정하면, 입력 데이타의 필드의 개수가 -G 옵션에 지정한 값보다 적거나, 데이타가 숫자가 아닌 문가가 오더라도 오류 메세지를 출력하지 않고 0으로 간주하여 계산을 진행한다.

# ls -l
total 624
-rw-------   1 guest    other     302660 Oct  3 17:02 dtdbcache_:0
-rw-rw-r--   1 root     sys         1384 Oct  3 13:37 ps_data
-rw-r--r--   1 guest    other          0 Oct  3 17:02 sdtvolcheck431
-rw-r--r--   1 guest    other         48 Oct  3 17:02 test
# ls -l | jsum -G 5
ERROR: Line=1: too few columns: 'total ...'
# ls -l | jsum -f -G 5
304092
# ls -l | jsum -f -G 4
0
-G fn[,fn,...] -G 옵션을 지정하면 컬럼 별로 합계를 구한다. 합계를 구하고 싶은 컬럼 번호를 콤마로 구분하여 지정할 수 있다. 입력 데이타 라인의 컬럼 수가 -G 옵션에 지정한 컬럼 번호보다 적으면 오류가 발생한다.
-H 옵션이 지정되어 있을 경우, -G 에 컬럼 번호대신에 컬럼명을 지정할 수 있다.

# cat exam.dat
120 10 29 10
99 89 12 10
20 20 10 10
20 20 20 20
# jsum -G 1 exam.dat
259
# jsum -G 1,2,3 exam.dat
259     139     71

-h -h 옵션을 지정하면 컬럼명 또는 라인번호(-l 옵션 사용시)를 출력한다.
-H -H 옵션을 지정하면 입력되는 유효한 첫번째 데이타가 컬럼명으로 인식한다. 이 컬럼명은 -G 옵션에 컬럼번호 대신에 사용될 수 있다.

헤더 정보에는 있는 각각의 필드명은 숫자로 시작하면 오류가 발생한다. 그러나 JS Parm V10.4 부터는 헤더 라인의 마지막 컬럼에 다음과 같은 시간 표시가 있는 것 경우, 오류를 발생하지 않고, 무시한다. 즉, 시간 표시가 없는 것과 같이 처리한다.


	mmdd.HH:MM:SS
	HH:MM:SS
-i -i 옵션을 지정하면 입력되는 데이타에서 소수점 이하의 값은 무시한다.
-l -l 옵션을 사용하면 각각의 라인에 있는 숫자를 모두 더하여 라인 별로 합계를 출력한다.
-L fn [-K keyfield] -L 옵션은 -K 옵션과 함께 사용되며, -K 옵션에 지정된 컬럼의 이름이 같은 것끼리 모아서 -L 옵션에 지정된 컬럼의 값의 합계를 출력한다.
-K 옵션이 지정되지 않으면 디폴트로 첫번째 컬럼이 사용된다.
-p -p 옵션을 사용하면 -G 옵션에서 지정한 컬럼의 데이타를 그대로 출력한다.
즉, 그 컬럼의 데이타를 뽑아낸다.
-S skiplist -S 옵션을 사용하면 합계를 구하는 데이타에서 제외하고 싶은 라인을 지정할 수 있다. 제외하고 싶은 라인의 시작하는 단어를 지정하면 된다 (단어의 시작부터 일부만 지정해도 된다). 여러 개를 지정할 경우 콤마(,)로 구분할 수 있다.
-s sep -s 옵션을 지정하면 출력되는 데이타의 구분자 지정할 수 있다. 이 옵션을 지정하지 않으면 탭(TAB)을 출력 구분자로 사용한다.
-U unit

-u num

-U 옵션에 지정할 수 있는 unit은 'k' 또는 'm' 또는 'g' 이다. 대소문자 구별 없이 사용할 수 있다.

'k'를 지정하면 출력되는 숫자를 1024로 나누어 KB 단위로 표시한다.
'm'를 지정하면 출력되는 숫자를 1024 * 1024로 나누어 MB 단위로 표시한다.
'g'를 지정하면 출력되는 숫자를 1024 * 1024 * 1024로 나누어 GB 단위로 표시한다.

어렇게 출력되는 숫자를 KB, MB, GB로 표시할 때, 디폴트로 소수점 2 자리까지 표시한다.
-u 1 옵션을 지정하면, 소수점 첫째 자리까지 표시하고, -u 3 옵션을 지젛하면, 수점 세째 자리까지 표시한다. 
-v -v 옵션은 -f 옵션과 함께 사용하여 숫자가 아닌 데이타가 있을 경우, 그 내용을 출력한다.
-V -V 옵션을 지정하면, 명령어의 버전 정보를 보여준다.
-z -z 옵션을 지정하면 합계 값이 0(zero)인 것을 출력하지 않는다.