Open usp Tukubaiコマンドマニュアル

2022年10⽉28⽇

ユニバーサル・シェル・プログラミング研究所

1

1bai
【名前】
1bai : 前0をとる
【書式】

Usage

: 1bai [-r] [<f1> <f2> ...] [<file>]
1bai -d[r] <string>
1bai -[r]d <string>
Version : Fri Aug 20 22:29:15 JST 2022
【説明】

指定したファイルの指定フィールドや指定した⽂字列の先頭の０を取り除きます。(⼩数点以下の後０も削除します) r オプションをつけると-1倍します。 d オプションをつけると引数で指定した⽂字列に対する処理をします。 <file> として - を指定するかまたは省略すると標準⼊⼒を使⽤します。フィールド指定 <f1>
<f2> ... を省略すると全フィールド指定となります。フィールド指定 <f1> <f2> ... にひとつでも0があると全フィールド指定となります。コマンド⼊⼒が「 1bai -r 」であったときは標準⼊⼒に対して全フィールドを-1倍します。コマンド⼊⼒が「 1bai 」であったときはコマンドの構⽂を表⽰して終了します【例１】$ cat data
0000000 浜地______ 50 F 91 59 20 76 540000001 鈴⽥______ 50 F 46 39 8 5 210000003 杉⼭______ 26 F 30 50 71 36 300000004 ⽩⼟______ 40 M 58 71 20 10 60000005 崎村______ 20 M 82 79 16 21 80
0000007 梶川______ 42 F 50 2 33 15 62$ 1bai 1 data > data2$ cat data2<- 1フィールド⽬の頭 "0" を取り去ります。
0 浜地______ 50 F 91 59 20 76 54
1 鈴⽥______ 50 F 46 39 8 5 21
3 杉⼭______ 26 F 30 50 71 36 30
4 ⽩⼟______ 40 M 58 71 20 10 6
5 崎村______ 20 M 82 79 16 21 80
7 梶川______ 42 F 50 2 33 15 62【例２】-r (reverse) オプションをつけると-1倍します。

$ cat filea 1 2 3 4 5
b 1 2 3 4 5$ 1bai -r 2 filea -1 2 3 4 5
b -1 2 3 4 5$ 1bai -r 2/4 filea -1 -2 -3 4 5
b -1 -2 -3 4 5$ 1bai -r 2 NF-1/NF filea -1 2 3 -4 -5
b -1 2 3 -4 -5【例３】
up3 と sm2 を組み合わせて同じキーをもつレコードの引き算を⾏います。

$ cat dataa 5b 2
$ cat data2
a 2
b 1$ 1bai -r 2 data2 | up3 key=1 data | sm2 1 1 2 2
a 3
b 1
【例４】
-d オプションはダイレクトモードです。引数に直接編集したい⽂字列を指定します。

2

$ 1bai -d 0123
123
$ 1bai -d 0123.400
123.4$ 1bai -d 0123.000
123$ 1bai -d 00
$ 1bai -d -000123.400-123.4$ 1bai -d +000123.400
123.4$ 1bai -dr 0123
-123
【例５】

前０をとることにより、シェルや awk の printf ⽂における８進数への⾃動置換を無効にします。
$ num=010<- ８進数と解釈されてしまう$ printf '%04d\n' $num0008
$ printf '%04d\n' $(1bai -d $num)
0010
【例６】

固定⻑テキストから変換されたデータは、符号や前０後０がついたものが多く、 1bai コマンドが役⽴ちます。
$ cat filea 000123.000 000345.000
b 000098.450 000100.000$ 1bai 2 3 filea 123 345
b 98.45 100【注意】

実⾏時パラメータの最後尾が実際に存在するファイルの名前であればそれを⼊⼒ファイルとして開く。このファイル名は「10」のような数字列であってもかまわない。最後尾が存在するファイル名でないときはそれをフィールドとして処理し、⼊⼒ファイル名は省略されたものとして標準⼊⼒(stdin)を使⽤する。
【コラム】

命名の由来対象の数字の⽂字列に１倍を掛けることにより０を取り除くため、 1bai と命名されています。

3

block_getlast(1)【名前】
block_getlast : 同⼀キーをもつレコードから、参照キーが同じ最終 ブロックをすべて出⼒する
【書式】

Usage
: block_getlast key=<key> ref=<ref> <file>
Version : Sun Feb 21 04:35:04 JST 2021
Edition : 1【説明】
key= で指定したフィールドの各レコードのうち、 ref= で指定した参照フィールドが同じ値を持つ最終ブロックをすべて出⼒します。⼊⼒データは、 key= で指定したフィールドについてソートされていることを前提とします。
key= や ref= には、範囲指定(例 1/3 2@5 )及び "NF" の使⽤が可能です。
<file> ファイルの指定が無いとき、あるいはファイル名が "-" の時は、標準⼊⼒を読み込みます。
【例１】

同じ伝票番号を持つレコードのうち、直近の⽇付のレコードを出⼒する。(data のレイアウト)
1

伝票No

2

⾏

3

項⽬１

4

項⽬２

5

⼊⼒年⽉⽇

$ cat data
0001 1 A 15 20081203
0001 2 K 25 20081203
0001 3 F 35 20081203
0001 1 A 15 20081205
0001 3 F 25 20081205
0002 2 X 30 20081201
0002 1 H 80 20081208$ block_getlast key=1 ref=NF data > result$ cat result
0001 1 A 15 20081205
0001 3 F 25 20081205
0002 1 H 80 20081208

4

calclock(1)【名前】
calclock : ⽇付と時刻を秒数に変換
【書式】

Usage
: calclock [-r] [<f1> <f2> <f3> ...] <file>
Version : Fri Aug 20 22:29:15 JST 2022
Edition : 1【説明】

標準⼊⼒または⼊⼒ファイル <file> の指定フィールド <f1> <f2> <f3> ...の年⽉⽇や時間を1970年1⽉1⽇
0時0分0秒からの秒数に変換して出⼒する。オプション -r を指定すると逆の変換を実施する。年⽉⽇データや時刻データを10進数に置き換えて計算するなどの⽤途に使⽤する。 <file> として - を指定すると標準⼊⼒を使⽤する。
⽇付や時刻は次のフォーマットである必要がある。
yyyymmdd
年⽉⽇(8桁)HHMMSS
時分秒(6桁)yyyymmddHHMMSS
年⽉⽇時分秒(14桁)
変換後の値を分に直す場合は60、時は3600、⽇は86400で除算する。
【注意】

⼊⼒ファイル <file> は省略できない フィールド指定 <f1> <f2> <f3> ... を省略すると全フィールド指定となる。 フィールド指定 <f1> <f2> <f3> ... に0があると全フィールド指定となる。 このとき同時に0以外のフィールド指定があってもそれらは無視される。
【例1】$ cat data
0001 0000007 20060201 20060206 117 8335 -145
0001 0000007 20060203 20060206 221 15470 00001 0000007 20060205 20060206 85 5950 00001 0000007 20060206 20060206 293 20527 -170001 0000007 20060207 20060206 445 31150 00002 0000007 20060208 20060206 150 11768 -1268
0002 0000007 20060209 20060206 588 41160 00002 0000007 20060210 20060206 444 31080 0$4フィールド⽬と3フィールド⽬を変換し、その間の差分の⽇数を求めるには次のようにコマンドを実⾏する。
$ calclock 3 4 - < data|tee data2|
awk '{print ($6-$4)/86400}'> data3$ cat data2
0001 0000007 20060201 1138752000 20060206 1139184000 117 8335 -145
0001 0000007 20060203 1138924800 20060206 1139184000 221 15470 00001 0000007 20060205 1139097600 20060206 1139184000 85 5950 00001 0000007 20060206 1139184000 20060206 1139184000 293 20527 -170001 0000007 20060207 1139270400 20060206 1139184000 445 31150 00002 0000007 20060208 1139356800 20060206 1139184000 150 11768 -1268
0002 0000007 20060209 1139443200 20060206 1139184000 588 41160 00002 0000007 20060210 1139529600 20060206 1139184000 444 31080 0$ cat data3
5
3
1
0
-1
-2
-3
-4
$
【例2】
-r オプションを使⽤すると、指定したフィールドの値(1970年1⽉1⽇0時0分0秒からの秒数)を通常の年⽉⽇

5

時分秒の14桁の表記に変換する。年⽉⽇のみのフォーマットにする場合は、出⼒後awk(1)のsubstr(-,-)
や self(1) で上8桁を切り出す。
$ cat data
0001 0000007 20060201 117 8335 -145
0001 0000007 20060203 221 15470 00001 0000007 20060205 85 5950 00001 0000007 20060206 293 20527 -170001 0000007 20060207 445 31150 00002 0000007 20060208 150 11768 -1268
0002 0000007 20060209 588 41160 00002 0000007 20060210 444 31080 0$
3フィールド⽬の各⽇の3⽇後の⽇付を求めるには、次のようにコマンドを実⾏する。
$ calclock 3 data
awk '{print $4+86400*3}'
tee data2
calclock -r 1 tee data3
self 2.1.8$ cat data2
1138978800
1139151600
1139324400
1139410800
1139497200
1139583600
1139670000
1139756400$ cat data3
1138978800 20060204000000
1139151600 20060206000000
1139324400 20060208000000
1139410800 20060209000000
1139497200 20060210000000
1139583600 20060211000000
1139670000 20060212000000
1139756400 20060213000000$ cat data4
20060204
20060206
20060208
20060209
20060210
20060211
20060212
20060213
$

|
|
|
|
|
> data4【関連項⽬】

dayslash(1) 、 mdate(1) 、 yobi(1)6calsed(1)【名前】
calsed : 軽いsed
【書式】

Usage

: calsed <org> <dst> <file>calsed -f <script> <file>
Option : -n<string>-s<c>Version : Tue Oct 19 23:46:03 JST 2021
Edition : 1【説明】calsed は sed の⽂字列置換機能の簡易版です。指定した元⽂字列を指定した⽂字列に置換します。sed のよ

うに、元⽂字列に正規表現を使うことはできません。ファイル名を指定しないか、 "-" の時は、標準⼊⼒を期待します。置換後⽂字列が "@" の場合、ヌル⽂字列に置換します。この⽂字列を変更するのに、 -n オプションを指定します。 -s オプションは置換後⽂字列の中で半⾓空⽩に変換する⽂字を指定します。
【例１】

直接置換⽂字列を指定する。
$ cat data<td>NAME</td><td>AGE</td>$ calsed NAME usp data<td>usp</td><td>AGE</td>$ calsed NAME usp data | calsed AGE 25 - > result$ cat result<td>usp</td><td>25</td>【例２】

置換後⽂字列に空⽩がある場合$ calsed NAME "usp lab" data > result$ cat result<td>usp lab</td><td>AGE</td>【例３】

置換後⽂字列にヌル⽂字列$ calsed NAME @ data > result$ cat result<td></td><td>AGE</td>【例４】

ヌル⽂字列への変換を⾏わない$ calsed -n "" NAME @ data > result$ cat result<td>@</td><td>AGE</td>【例５】

空⽩に変換する⽂字を指定する$ calsed -s_ NAME usp_lab data<td>usp lab</td><td>AGE</td>【例６】

変換元⽂字列と変換後⽂字列をセットにしたファイルを指定して、置換を⾏うことができます。このファイル
は name 形式であることが必要です。

7

before1 after1
before2 after2
before3 after3<before> ⽂字列のあと、半⾓空⽩を１個はさんで <after> ⽂字列を指定します。 <after> ⽂字列はヌル⽂字列でも半⾓空⽩を含む⽂字列でも構いません。 <after> ⽂字列が "@" の時、ヌル⽂字列に変換されます。この⽂字列は -n オプションで変更できます。 -s オプションで <after> ⽂字列の⽂字を半⾓空⽩に置換することができます。
$ cat script
NAME usp
AGE 25$ calsed -f script data > result$ cat result<td>usp</td><td>25</td>【例７】$ cat script2
NAME @AGE$ calsed -f script2 data > result$ cat result<td></td><td></td>【例８】

空⽩をそのまま置換する$ cat script3 <- [空⽩]usp[空⽩]lab[空⽩] を指定
NAME usp lab
AGE 25$ calsed -f script3 data > result$ cat result<td> usp lab </td><td>25</td>【例９】

空⽩⽂字に置換する⽂字を指定$ cat script4
NAME usp_lab
AGE 25$ calsed -s_ -f script4 data > result$ cat result<td>usp lab</td><td>25</td>8

cap(1)【名前】
cap : 半⾓英数の⼩⽂字を⼤⽂字に変換する
【書式】

Usage

: cap [<f1> <f2> ..] <file>cap -d <string>
Version : Thu Apr 21 00:58:47 JST 2022
Edition : 1【説明】

引数で指定したフィールドの半⾓英⼩⽂字を、すべて半⾓英⼤⽂字に変換して出⼒する。変換できない⽂字(⽇本語、数字、記号、全⾓⽂字)は、変換されずにそのまま出⼒される。 <file> として - を指定すると標準⼊⼒を使⽤する。
-d オプションがあると <string> で指定された⽂字列に対して変換を⾏なう。
【注意】

⼊⼒ファイル <file> は省略できない フィールド指定 <f1> <f2> ... を省略すると全フィールド指定となる。 フィールド指定 <f1> <f2> ... に0があると全フィールド指定となる。 このとき同時に0以外のフィールド
指定があってもそれらは無視される。
【例１】(元データ)$ cat data
001 japan america
002 england russia$ cap 1 2 data
001 JAPAN america
002 ENGLAND russia【例２】$ cap -d japan
JAPAN

9

cgi-name(1)【名前】
cgi-name : CGI POSTメソッドで受け渡されるデータをネーム形式に変換
【書式】

Usage
: cgi-name [-d<c>][-i<string>] [<param_file>]
Option :[--template <html>]
Version : Oct 20 17:32:09 JST 2022
Edition : 1【説明】
cgi-name はWEBサーバのCGI POSTメソッドで受け渡されるデータをネーム形式へ変換する。
【例1】

Webサーバより place=tokyo&country=japan という⽂字列が渡される場合、キー値と値をネーム形式に変
更して出⼒する。
$ dd bs=$CONTENT_LENGTH | cgi-nameplace tokyo
country japan$【例2】

改⾏( %0D%0A )は⽂字列 '\n' に変換される。また、記号 '+' は半⾓空⽩に変換される。
$ echo 'place=%E6%9D%B1%E4%BA%AC%0D%0A%E5%A4%A7%E9%98%AA&country=ja+pan' | cginame
place 東京\n⼤阪
country ja pan$【例3】-d オプションを指定すると半⾓空⽩は削除あるいは指定⽂字に変換される。

$ echo 'place=tokyo osaka&country=japan' | cgi-nameplace tokyo osaka
country japan$$ echo 'place=tokyo osaka&country=japan' | cgi-name -d_place tokyo_osaka
country japan$$ echo 'place=tokyo osaka&country=japan' | cgi-name -dplace tokyoosaka
country japan$【例4】-i オプションを指定することで、返される⽂字列がヌルの場合の初期値を指定できる。

$ echo 'place=&country=japan' | cgi-nameplacecountry japan$$ echo 'place=&country=japan' | cgi-name -isomewhereplace somewherecountry japan$【例5】--template オプションを指定することで、指定したHTMLテンプレートより、radioboxとcheckboxの名称を取り出し、その名称でデータが出⼒されなければ、出⼒をその名称で補完する。radioboxやcheckboxは選択しないでsubmitすると値そのものが出⼒されない。何も選択しなかったというデータを⽣成するためにこのオプションを使⽤する。

10

$ cat html-----省略<input type="radiobox" name="XXXX" value="A" /><input type="radiobox" name="XXXX" value="B" /><input type="radiobox" name="XXXX" value="C" /><input type="checkbox" name="YYYY" value="a" /><input type="checkbox" name="YYYY" value="b" /><input type="checkbox" name="YYYY" value="c" />-----省略$$ dd bs=$CONTENT_LENGTH | cgi-name -i_ --template html-----省略XXXX _YYYY _-----省略$【例6】

radiobox checkboxがhtmlテンプレートの mojihame -l コマンド対象部分にある場合においても、タグ名_%数
字を認識して選択値がなくてもタグ名を出⼒する。
$ cat html-----省略<!-- MOJIHAME --><input type="radiobox" name="X_%1" value="%2" /><!-- MOJIHAME -->-----省略$$ dd bs=$CONTENT_LENGTH | cgi-name -i_ --template html-----省略X _-----省略$【備考】

CGI POSTメソッドで受け渡されるデータには改⾏がない。通常のファイルとして使⽤するには、ファイル末に改⾏コードを付加しておくほうが扱いやすい。 cgi-name コマンドはファイル末の改⾏があってもなくても正しく値を取り出す。
【関連項⽬】

mime-read(1) 、 nameread(1) 、 ネーム形式(5)11check_attr_name(1)【名前】
check_attr_name : ネームファイルのデータ種類を⾏ごとに判定
【書式】

Usage
OptionAttribute

Version
Edition: check_attr_name <check_file> <name_file>: --through <string> --ngword <ng_file>: n N (0以上整数)
s S (符号つき整数)
f F (⼩数)v V (符号つき⼩数)e E (英字)a A (アスキー⽂字)b B (英数字)h H (半⾓⽂字)
z Z (全⾓⽂字)
k K (全⾓カタカナ)x X (⽂字)c C (チェックディジット)o O (英⼤⽂字)j J (住所=全⾓+半⾓英数): Mon Dec 20 21:02:03 JST 2021
: 1

【説明】
<check_file> に記述されているタグ名、属性+桁数の指定にしたがって <name_file> のデータを判定する。データが⼤⽂字なら桁数に等しい値を、⼩⽂字なら指定桁数未満の値を要求する。 <name_file> のタグ
は、タグ名_数値であれば、_数値部分を取り除いたタグ名のみでチェックをする。エラーがあった場合は、コマ
ンドはエラー終了し標準出⼒にタグ名と桁数+属性を出⼒する。
--through <string> オプションは、 <name_file> のデータが <string> のうちいずれかに等しい場合

はチェックを実施しない。 <string> のデフォルトは_となる。このオプションは繰り返し使って複数の <string> を指定することができる。
--ngword <ng_file> オプションは、Z X K などの⽇本語⽂字チェックのときに、 <ng_file> に含まれてるマルチバイト⽂字をエラーとする。
【例1】通常のチェック$ cat check
A N3
B n4
C x3
D X6
$
$ cat data
A 200
B 12345
C abcdeD_001 xxxxxx
D_002 xxxxx
D_003 xxxx$

←3桁整数
←4桁以下の整数←5桁以下の⽂字←6桁の⽂字←"D 6X" としてチェックされる$ check_attr_name check data
B n4
C x3
D_002 X6
D_003 X6
$ echo $?
1$【例2】--through オプションでチェックしない値を指定する$ cat data2
A 200
B _
C _
D_001 xxxxxx
D_002 _
D_003 _$

12

$ check_attr_name --through _ check data2$ echo $?
0$【関連項⽬】

ネーム形式(5)13check_cmp_name(1)【名前】
check_cmp_name : name 形式データの値の⼤⼩関係をチェックする
【書式】

Usage
: check_cmp_name <expression> <name_file>
Option : --through <string>
Version : Tue Oct 19 23:46:03 JST 2021
Edition : 1【説明】<expression> の記述に従って、 <name_file> のデータのタグ同⼠やタグと値の⼤⼩関係をチェックします。
エラーがある場合， <expression> を満たさないタグ名をすべて標準出⼒に出⼒してから、エラー終了します。
<expression> は、'左辺 記号 右辺' と記述します。左辺と右辺にはタグ名や値を指定します。記号について

は、次の６種類が使えます。

14

-EQ -eq-NE -ne-GE -ge-GT -gt-LE -le-LT -lt<-- =<-- !=<-- >=<-- ><-- <=<-- <(equal)(not equal)(greater or equal)(greater)(less or equal)(less)--through <string> に関しては <name_file> で定義されるデータが <string> に⼀致する場合は、チェックを実施しません。 <string> のデフォルトは '_' です。このオプションは繰り返し使って複数の <string> を指定できます。

【例１】[usp1 usp@ ~]$ cat data
A 200
B 300
C _
D_001 3
D_002 2
D_003 1
E_001 1
E_002 2
E_003 3

(タグ名とタグ名の⽐較)$ check_cmp_name 'A -le B' data
$ echo $?
0$ check_cmp_name 'A -eq B' dataAB
$ echo $?
1(タグ名と数値の⽐較)$ check_cmp_name 'A -gt 300' dataA
$ echo $?
1( '_' の場合はチェックしない)$ check_cmp_name 'C -ne 0' data
$ echo $?
0(複数レコードも正しくチェックする)$ check_cmp_name 'D -le E' data
D_001
E_001
$ echo $?
115check_date_name(1)【名前】
check_date_name : name 形式データの⽇付をチェックする
【書式】

Usage
: check_date_name <check_file> <name_file>
Option : --through <string>
Version : Tue Oct 19 23:46:03 JST 2021
Edition : 1【説明】<check_file> に記述されているタグ名、記号(D/W/M)に従って <name_file> の⽇/週/⽉の記述が正しいかどうかチェックします。エラーがあった場合は、コマンドはエラー終了し、標準出⼒にタグ名と、記号をを出
⼒します。
オプション
--through <string> <check_file> と <name_file> のデータが <string> で指定した⽂字列に等しい

場合は、チェックを実施しません。 <string> のデフォルトは、 "_" となります。このオプションは繰り返
し使って複数の <string> を指定できます。
【例１】 通常のチェック[usp1 usp@ ~]$ cat check
A D<-- ⽇付
B W
<-- 週
C M
<-- ⽉
D _
<-- チェック無し[usp1 usp@ ~]$ cat data
A 20081010
B 200852
C_001 200813<-- ⽉として正しく無い
C_002 _<-- _ データはチェックしない
C_003 200804
D 9999[usp1 usp@ ~]$ check_date_name check data
C_001 M$ echo $?
116check_dble_name(1)【名前】
check_dble_name : name 形式データの重複チェックをする
【書式】

Usage
: check_dble_name <check_file> <name_file>
Option : --through <string>
Version : Sun Nov 21 17:29:32 JST 2021
Edition : 1【説明】<check_file> に記述されているタグ名について、 <name_file> の値の重複チェックをします。重複があった場合は、そのつど標準出⼒に重複のあったタグ名を出⼒し、コマンド終了時には「エラー終了」とします。最初のエラーで終了するのではなく、複数の重複があっても対応します。
【オプション】--through <string> <name_file> のデータが <string> と等しい場合は、チェックを実施しません。 <string> のデフォルトは、 "_" となります。このオプションは繰り返し使って複数の <string> を指定することができます。
【例１】[usp1 usp@ ~]$ cat checkA[usp1 usp@ ~]$ cat data
A_001 5
A_002 5
A_003 6
A_004 7[usp1 usp@ ~]$ check_dble_name check data
A_001
A_002
$ echo $?
1【例２】[usp1 usp@ ~]$ cat data
A_001 5
A_002 5
A_003 @
A_004 @
A_005 @
[usp1 usp@ ~]$ check_dble_name --through @ check data
A_001
A_002
$ echo $?
117check_inlist_name(1)【名前】
check_inlist_name : name 形式データのリスト内存在チェックをする
【書式】

Usage
: check_inlist_name <check_file> <name_file>
Option : --through <string>
Version : Sun Nov 21 17:29:32 JST 2021
Edition : 1【説明】<check_file> に記述されているタグ名とリスト名にしたがい、 <name_file> の値がリストに存在しているかのチェックをします。 <check_file> で複数のタグ名を「.」で区切って連接しタグ組として指定したときは <name_file> の複数の⾏で同⼀の連番でタグ組を構成しそれぞれの値でつくる組がリストファイル中に存在するかをチェックします
エラーがあった場合は、コマンドはエラー終了し、標準出⼒にタグ名とリスト名を出⼒します。
オプション--through <string> <name_file> のデータが <string> に等しい場合は、チェックを実施しません。 <string> のデフォルトは、 "_" となります。このオプションは繰り返し使って複数の <string> を指定することができます。
【例１】[usp1 usp@ ~]$ cat check
A /tmp/OS_FILE<-- タグ名とリストファイル名(絶対パスであること)
B /tmp/ABC_FILE[usp1 usp@ ~]$ cat /tmp/OS_FILE
Linux# commentUNIX# comment
Windows# comment[usp1 usp@ ~]$ cat /tmp/ABC_FILE
abc# comment
cde# comment[usp1 usp@ ~]$ cat data
A Linux
B_001 abc
B_002 cde
B_003 fgh
B_004 _<-- "_" はチェックの対象外(--through オプションで変更可)[usp1 usp@ ~]$ check_inlist_name check data
B_003 /tmp/ABC_FILE[usp1 usp@ ~]$ echo $?
1【例２】

複数チェック[usp1 usp@ ~]$ cat check
A.B list1<-- dataファイル中の（連番が同じ）「A_nの値とB_nの値」の組がlist1ファイルにあるか
C list2[usp1 usp@ ~]$ cat list1
1 3 # comment
4 5 # comment[usp1 usp@ ~]$ cat list2
5 # comment
6 # comment
7 # comment[usp1 usp@ ~]$ cat data
A_01 1
A_02 2
B_01 3
B_02 4C 1

18

[usp1 usp@ ~]$ check_inlist_name check data
A_02 B_02 list1<-- dataファイル中の「A_02の値とB_02の値の組」は「2 4」でこれはlist1
ファイルにないC list2[usp1 usp@ ~]$ echo $?
119check_need_name(1)【名前】
check_need_name : ネームファイルの整合性判定
【書式】

Usage
: check_need_name <check_file> <name_file>
Option : --blank <string>
Version : Oct 20 17:32:10 JST 2022
Edition : 1【説明】<check_file> に記述されているフィールド値に基づいて、 <name_file> ネームファイルの整合性を判断する。 <check_file> に記述されている第1フィールドの値が <name_file> の第1フィールドのどこにも存在しなかったり、 <name_file> の第2フィールドの値がない、または_だった場合にコマンドはエラー終了し、標準出⼒にそのフィールド値を出⼒する。
<check_file> ファイルは2フィールドあっても動作する。詳しくは例1を参照のこと。 <check_file> は、フィールド値+(_以外の⽂字列)でも正しく認識する。
--blank <string> オプションは、 <name_file> のデータの値が <string> の場合はデータがないとみなす。つまり、 <check_file> に指定されていて値が <string> である⾏はエラーになる。 <string> のデ
フォルトは_となる。
【例1】通常のチェック$ cat check_file
A
B
C
D
$
$ cat check_file2
A needB needC needD needE _F _$←check_fileとcheck_file2は同等$ cat name_file
A _B 12345
C abcdeD_001 _
D_002 xxx$
$ check_need_name check_file name_fileA
D_001$ echo $?
1$【例2】--blank オプションでヌルデータを指定する。

$ cat name_file2
A @
B 1
C 2
D 3
$
$ check_need_name --blank @ check_file name_file2
A$ echo $?
1$【関連項⽬】

ネーム形式(5)20

21

cjoin0(1)【名前】
cjoin0 : マスタファイルにキーフィールドが⼀致するトランザクションファイルの⾏を抽出
【書式】

Usage
: cjoin0 [+ng[<fd>]] key=<n> <master> [<tran>]
Version : Fri May 20 21:16:07 JST 2022
Edition : 1【説明】tranの key=<n> で指定したキーフィールドがmasterの第1フィールド(キーフィールド)と⼀致した⾏のみtranから抽出して出⼒する。
masterに - を指定すると標準⼊⼒をマスタファイルとする。tranが無指定かまたは - が指定されている場合には、標準⼊⼒がトランザクションファイルとなる。
masterの第1フィールドとtranの第 <n> フィールドは整列されていなくてもよく、キーフィールドに同じ値を持つレコードはいくつあっても構わない。
キーに選択するフィールドは複数指定することもできる。たとえば key=3/5 のように指定した場合、tranの第3、第4、第5フィールドを意味するようになる。またこの場合、masterのキーは第1、第2、第3フィールドとなる。 key=3@5 とすると第3、第5フィールドを意味する。⾏のフィールド数を意味する NF を使⽤して NF ま
たは NF-x の形でフィールド位置を指定することができる
キー指定にひとつでも0があると全フィールドを指定したことになる+ng オプションをつけると、⼀致した⾏を標準出⼒ファイルへ、⼀致しなかった⾏をファイルデスクリプ

タ <fd> のファイルへ出⼒する。 <fd> を省略した場合は標準エラー出⼒ファイルへ出⼒する。
tran のキーが整列済みであれば cjoin0(1) ではなく join0(1) で処理できる。 cjoin0(1) はtranのキーが整列されていないものも処理できるが、masterをすべてメモリに読み込むため、メモリ確保エラーが発⽣する可能性がある。 cjoin0(1) はmasterが⼩さくtranが⼤容量な場合に効果的に使⽤できる。
【例1】基本パターン

成績ファイルkekkaからmasterに登録されている4⼈のデータを抽出する。
$ cat master
0000003 杉⼭______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F$
$ cat kekka
0000005 82 79 16 21 80
0000001 46 39 8 5 210000004 58 71 20 10 60000009 60 89 33 18 60000003 30 50 71 36 300000007 50 2 33 15 62$
kekkaの第1フィールドがmasterファイルに存在する⾏のみ抽出する。
$ cjoin0 key=1 master kekka
0000005 82 79 16 21 80
0000003 30 50 71 36 300000007 50 2 33 15 62$【例2】+ngオプションの使い⽅$ cjoin0 +ng key=1 master kekka > ok 2> ng$ cat ng
0000001 46 39 8 5 210000004 58 71 20 10 60000009 60 89 33 18 6$
【例3】標準⼊⼒の使い⽅22$ cat kekka | cjoin0 +ng key=1 master > ok 2> ng$ cat kekka | cjoin0 +ng key=1 master - > ok 2> ng$ cat master | cjoin0 +ng key=1 - tran > ok 2> ng【関連項⽬】

cjoin0(1) 、 cjoin1(1) 、 cjoin2(1) 、 join1(1) 、 join2(1) 、 loopj(1) 、 loopx(1) 、 up3(1) 、 マ
スタファイル(5) 、 トランザクションファイル(5)23cjoin1(1)【名前】
cjoin1 : トランザクションファイルにマスタファイルを連結(⼀致した⾏のみ連結)
【書式】

Usage
: cjoin1 [+ng[<fd>]] key=<n> <master> [<tran>]
Version : Fri May 20 21:16:07 JST 2022
Edition : 1【説明】tranの key=<n> で指定したキーフィールドがmasterの第1フィールド(キーフィールド)と⼀致した⾏のみtranから抽出して、masterの情報を連結して出⼒する。連結はtranのキーフィールドの直後にmasterの内容を挿⼊連結する形で実施される。
masterに - を指定すると標準⼊⼒をマスタファイルとする。tranが無指定かまたは - が指定されている場合には、標準⼊⼒がトランザクションファイルとなる。
masterの第1フィールドとtranの第 <n> フィールドは整列されていなくてもよく、キーフィールドに同じ値を持つレコードはいくつあっても構わない。
キーに選択するフィールドは複数指定することもできる。たとえば key=3/5 のように指定した場合、tranの第3、第4、第5フィールドを意味するようになる。またこの場合、masterのキーは第1、第2、第3フィールドとなる。 key=3@5 とすると第3、第5フィールドを意味する。⾏のフィールド数を意味する NF を使⽤して NF ま
たは NF-x の形でフィールド位置を指定することができる。
キー指定にひとつでも0があると全フィールドを指定したことになる。
+ng <fd> オプションを使うことで、⼀致した⾏を標準出⼒ファイルへ、⼀致しなかった⾏をファイルデス

クリプタ <fd> のファイルへ出⼒することが可能。 <fd> を省略した場合は標準エラー出⼒へ出⼒する。
tran のキーが整列済みであれば cjoin1(1) ではなく join1(1) で処理できる。 cjoin1(1) はtranのキーが整列されていないものも処理できるが、masterをすべてメモリに読み込むため、メモリ確保エラーが発⽣する可能性がある。 cjoin1(1) はmasterが⼩さくtranが⼤容量な場合に効果的に使⽤できる。
【例1】基本パターン$ cat master
0000003 杉⼭______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F$
$ cat tran
0000005 82 79 16 21 80
0000001 46 39 8 5 210000004 58 71 20 10 60000009 60 89 33 18 60000003 30 50 71 36 300000007 50 2 33 15 62$$ cjoin1 key=1 master tran > ok
$ cat ok
0000005 崎村______ 50 F 82 79 16 21 80
0000003 杉⼭______ 26 F 30 50 71 36 300000007 梶川______ 42 F 50 2 33 15 62$【例2】+ngオプションの使い⽅$ cjoin1 +ng key=1 master tran > ok 2> ng$ cat ng
0000001 46 39 8 5 210000004 58 71 20 10 60000009 60 89 33 18 6$
【例3】標準⼊⼒の使い⽅$ cat tran | cjoin1 +ng key=1 master > ok 2> ng$ cat tran | cjoin1 +ng key=1 master - > ok 2> ng$ cat master | cjoin1 +ng key=1 - tran > ok 2> ng

24

【関連項⽬】

cjoin0(1) 、 cjoin1(1) 、 cjoin2(1) 、 join0(1) 、 join2(1) 、 loopj(1) 、 loopx(1) 、 up3(1) 、 マ
スタファイル(5) 、 トランザクションファイル(5)25cjoin1x(1)【名前】
cjoin1x : キーの値が同じレコードが複数存在するファイル同⼠を連結。
【書式】

Usage
: cjoin1x [+ng[<fd>]] key=<n> <master> [<tran>]
Version : Fri Jul 22 01:09:14 JST 2022
【説明】

テキストファイル <tran> の "key=<n>" で指定したキーフィールドがマスターファイル <master> の第１フィールド(キーフィールド)とマッチした⾏のみを <tran> から抽出して、 <master> の情報を連結して出⼒します。連結は <tran> のキーフィールドの直後に <master> の内容のうちキーフィールド以外を挿⼊する形
で⾏われます。
複数のキーフィールドがある場合、 <master> のキーフィールドは、 <tran> のキーフィールドと同じ並びで、最⼩フィールドが１となるようスライドさせたキーフィールドとなります。例えば、 key=3/5 のときは、並び＝３フィールド連続したキー、なので、 <master> は１から３連続したフィールド、つまり、第１から第３フィールドがキーとなります。
masterまたはtranに - を指定すると標準⼊⼒を使⽤する。tranが無指定の場合には標準⼊⼒を使⽤する。
<master> の第１フィールドについては必ず昇順でソートされていることが条件になります。
+ng オプションをつけると、⼀致した⾏を標準出⼒ファイルへ、⼀致しなかった⾏をファイルディスクリプ

タ <fd> のファイルへ出⼒する。 <fd> を省略した場合は標準エラー出⼒ファイルへ出⼒する。
cjoin1 との違いは、マスターファイルのキーフィールドの値が同⼀のレコードが複数存在できる点です。

マスターとトランザクションファイルのキーフィールド値が同⼀のレコード同⼠を総掛けで連結して出⼒します。
【例１】(マスター：master)$ cat master
1 東京1
1 東京2
2 ⼤阪1
2 ⼤阪2
(トランザクション：tran)$ cat tran
3 栄
2 京橋
3 ⾦⼭
1 上野
1 新宿
4 天神
2 難波
3 熱⽥
2 梅⽥
4 博多
$ cjoin1x key=1 master tran > data
$ cat data
2 ⼤阪1 京橋
2 ⼤阪2 京橋
1 東京1 上野1 東京2 上野
1 東京1 新宿
1 東京2 新宿
2 ⼤阪1 難波
2 ⼤阪2 難波
2 ⼤阪1 梅⽥
2 ⼤阪2 梅⽥26

cjoin2(1)【名前】
cjoin2 : トランザクションファイルにマスタファイルを連結(⼀致しなかった⾏はダミーデータへ置換)
【書式】

Usage
: cjoin2 [-d<string>] [+<string>] key=<key> <master> [<tran>]
Version : Fri May 20 21:16:07 JST 2022
Edition : 1【説明】tranの key=<n> で指定したキーフィールドがmasterの第1フィールド(キーフィールド)と⼀致した⾏をtranから抽出し、masterの情報を連結して出⼒する。⼀致しない⾏はダミーデータ*を連結して出⼒する。ダミーデータ
は -d オプションまたは+オプションにて指定できる。
masterに - を指定すると標準⼊⼒をマスタファイルとする。tranが無指定かまたは - が指定されている場合には、標準⼊⼒がトランザクションファイルとなる。
masterの第1フィールドとtranの第 <n> フィールドは整列されていなくてもよく、キーフィールドに同じ値を持つレコードはいくつあっても構わない。
キーに選択するフィールドは複数指定することもできる。たとえば key=3/5 のように指定した場合、tranの第3、第4、第5フィールドを意味するようになる。またこの場合、masterのキーは第1、第2、第3フィールドとなる。 key=3@5 とすると第3、第5フィールドを意味する。⾏のフィールド数を意味する NF を使⽤して NF ま
たは NF-x の形でフィールド位置を指定することができる
キー指定にひとつでも0があると全フィールドを指定したことになるtran のキーが整列済みであれば cjoin2(1) ではなく join2(1) で処理できる。 cjoin2(1) はtranのキーが整列されていないものも処理できるが、masterをすべてメモリに読み込むため、メモリ確保エラーが発⽣する可能性がある。 cjoin2(1) はmasterが⼩さくtranが⼤容量な場合に効果的に使⽤できる。
【例1】基本パターン$ cat master
0000003 杉⼭______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F$
$ cat tran
0000005 82 79 16 21 80
0000001 46 39 8 5 210000004 58 71 20 10 60000009 60 89 33 18 60000003 30 50 71 36 300000007 50 2 33 15 62$$ cjoin2 key=1 master tran > ok
$ cat ok
0000005 崎村______ 50 F 82 79 16 21 80
0000001 ********** ** * 46 39 8 5 210000004 ********** ** * 58 71 20 10 60000009 ********** ** * 60 89 33 18 60000003 杉⼭______ 26 F 30 50 71 36 300000007 梶川______ 42 F 50 2 33 15 62$【例2】-d<⽂字列> +<⽂字列> オプションの使い⽅$ cjoin2 -d@@ key=1 master tran > ok
$ cat ok
0000005 崎村______ 50 F 82 79 16 21 80
0000001 @@ @@ @@ 46 39 8 5 210000004 @@ @@ @@ 58 71 20 10 60000009 @@ @@ @@ 60 89 33 18 60000003 杉⼭______ 26 F 30 50 71 36 300000007 梶川______ 42 F 50 2 33 15 62$27

$ cjoin2 +@@ key=1 master tran > ok
$ cat ok
0000005 崎村______ 50 F 82 79 16 21 80
0000001 @@ @@ @@ 46 39 8 5 210000004 @@ @@ @@ 58 71 20 10 60000009 @@ @@ @@ 60 89 33 18 60000003 杉⼭______ 26 F 30 50 71 36 300000007 梶川______ 42 F 50 2 33 15 62$【例3】標準⼊⼒の使い⽅$ cat tran | cjoin2 +ng key=1 master$ cat tran | cjoin2 +ng key=1 master $ cat master | cjoin2 +ng key=1 - tran
【関連項⽬】

cjoin0(1) 、 cjoin1(1) 、 cjoin2(1) 、 join0(1) 、 join1(1) 、 loopj(1) 、 loopx(1) 、 up3(1) 、 マ
スタファイル(5) 、 トランザクションファイル(5)28cjoin2x(1)【名前】
cjoin2x : キーの値が同じレコードが複数存在するファイル同⼠を連結。
【書式】

Usage
: cjoin2x [+<string>] key=<n> <master> <tran>
Version : Fri Jul 22 01:09:14 JST 2022
Edition : 1【説明】

テキストファイル <tran> の "key=<n>" で指定したキーフィールドがマスターファイル <master> の第１フィールド(キーフィールド)とマッチした⾏を <tran> から抽出して、 <master> の情報を連結して出⼒します。マッしない⾏は、ダミーデータ "_" をフィールド数分だけ結合して出⼒します。ダミーデータは指定することもできます。
<master> の第１フィールドについては必ず昇順でソートされていることが条件になります。
<master> が空ファイル(0バイト)の場合はエラーになります。
cjoin2 との違いは、マスターファイルのキーフィールドの値が同⼀のレコードが複数存在できる点です。

マスターとトランザクションファイルのキーフィールド値が同⼀のレコード同⼠を総掛けで連結して出⼒します。
【例１】(マスターファイル：master)$ cat master
1 東京1
1 東京2
2 ⼤阪1
2 ⼤阪2
(トランザクションファイル：tran)$ cat tran
3 栄
2 京橋
3 ⾦⼭
1 上野
1 新宿
4 天神
2 難波
3 熱⽥
2 梅⽥
4 博多
$ cjoin2x key=1 master tran >data$ cat data
3 _ 栄
2 ⼤阪1 京橋
2 ⼤阪2 京橋
3 _ ⾦⼭1 東京1 上野1 東京2 上野
1 東京1 新宿
1 東京2 新宿
4 _ 天神2 ⼤阪1 難波
2 ⼤阪2 難波
3 _ 熱⽥2 ⼤阪1 梅⽥
2 ⼤阪2 梅⽥
4 _ 博多29

comma(1)【名前】
comma : 指定したフィールドに3桁または4桁のカンマを追加
【書式】

Usage

: comma [+<n>h][-4] [<f1> <f2> ...] <file>: comma -d[4] <string>
Version : Thu Apr 21 00:58:47 JST 2022
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータの数字フィールドに3桁または4桁のカンマを追加する。カンマを追加するフィールドは引数で指定できる。 <file> として - を指定すると標準⼊⼒を使⽤する。
【注意】

⼊⼒ファイル <file> は省略できない フィールド指定 <f1> <f2> ... を省略すると全フィールド指定となる。 フィールド指定 <f1> <f2> ... に0があると全フィールド指定となる。 このとき同時に0以外のフィールド
指定があってもそれらは無視される。
【例1】$ cat data
20060201 296030 6710000
20060202 1300100 3130000
20060203 309500 20100
20060204 16300 300100
20060205 41000 210000
20060206 771100 400000$$ comma 2 3 data
20060201 296,030 6,710,000
20060202 1,300,100 3,130,000
20060203 309,500 20,100
20060204 16,300 300,100
20060205 41,000 210,000
20060206 771,100 400,000$$ comma -4 2 3 data
←4桁カンマ20060201 29,6030 671,0000
20060202 130,0100 313,0000
20060203 30,9500 2,0100
20060204 1,6300 30,0100
20060205 4,1000 21,0000
20060206 77,1100 40,0000$【例2】+h オプションを使⽤すると1⾏⽬の⾏を除いてカンマを追加する。先頭⾏が項⽬名などの場合に使⽤する。

+2hや+3hのように数字を指定すると、2⾏⽬または3⾏⽬以降の⾏にカンマを追加するようになる。
$ cat data
←元データ：先頭⾏に項⽬(ヘッダー)がついている
年⽉⽇ 売上⾼ 発注⾼20060201 296030 6710000
20060202 1300100 3130000
20060203 309500 20100
20060204 16300 300100
20060205 41000 210000
20060206 771100 400000$$ comma +h 2 3 data
年⽉⽇ 売上⾼ 発注⾼20060201 296,030 6,710,000
20060202 1,300,100 3,130,000
20060203 309,500 20,100
20060204 16,300 300,100
20060205 41,000 210,000
20060206 771,100 400,000$←先頭⾏を除いてカンマ変換する

【例3】

30

数字の⽂字列を直接引数に指定してカンマを追加することができる。
$ comma -d 1234567
1,234,567$$ comma -d4 1234567
123,4567$【ワンポイント】

データファイルの数値にcommaでカンマを追加してしまうと、それ以降は sm2(1) や divsen(1) などでの数値計算はできなくなる。カンマの追加はすべての計算を終えた最終成形の段階で使⽤する。
【ワンポイント】

⼩数桁についてはカンマを追加しない。負数も正しくカンマ処理が実施される。
【関連項⽬】

keta(1)31

count(1)【名前】
count : 同じキーの⾏数をカウント
【書式】

Usage
: count <k1> <k2> <file>
Version : Thu Aug 20 03:13:37 JST 2020
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータの指定したキーフィールドの値が同じ⾏(⾏)の数を出⼒する。キーとなるフィールドは開始となるフィールドkey1から、終了となるフィールドkey2への形で指定する。
【例1】$ cat data
01 埼⽟県 01 さいたま市 91 59 20 76 54
01 埼⽟県 02 川越市 46 39 8 5 21
01 埼⽟県 03 熊⾕市 82 0 23 84 10
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 千代⽥区 39 22 13 76 08
02 東京都 08 ⼋王⼦市 82 79 16 21 80
02 東京都 09 ⽴川市 50 2 33 15 62
03 千葉県 10 千葉市 52 91 44 9 0
03 千葉県 11 市川市 60 89 33 18 6
03 千葉県 12 柏市 95 60 35 93 76
04 神奈川県 13 横浜市 92 56 83 96 75
04 神奈川県 14 川崎市 30 12 32 44 19
04 神奈川県 15 厚⽊市 48 66 23 71 24
04 神奈川県 16 ⼩⽥原市 45 21 24 39 03$$ count 1 2 data
01 埼⽟県 3
02 東京都 6
03 千葉県 304 神奈川県 4$←県ごとの市の数を数えて出⼒【関連項⽬】gyo(1) 、 juni(1) 、 rank(1) 、 retu(1)32ctail(1)【名前】
ctail : ファイルの末尾n⾏を削って出⼒
【書式】

Usage

: ctail -n <file>: ctail n <file>: ctail -<n>c <file>
Version : Wed May 20 04:47:48 JST 2020
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータから、引数 -n (またはn)で指定した⾏数の末尾⾏を除いて標準出⼒に出⼒する。
【例】ファイルの末尾3⾏を削って表⽰する。

$ cat data001 北海道
002 東北003 関東004 中部
005 近畿006 中部
007 四国008 九州009 沖縄$$ ctail -3 data > data2$ cat data2001 北海道
002 東北003 関東004 中部
005 近畿006 中部$【例2】ファイルの末尾nバイトを削る$ echo -n abcde | ctail -1c
abcd$$ echo -n abcde | ctail -2cabc$【関連項⽬】

getfirst(1) 、 getlast(1) 、 tcat(1) 、 ycat(1)33dayslash(1)【名前】
dayslash : ⽇付と時刻のフォーマット変換
【書式】

Usage
: dayslash [-r] <format> <field> <file>
Version : Wed May 20 04:47:48 JST 2020
Edition : 1【説明】

標準⼊⼒または⼊⼒ファイル <file> の指定フィールド <field> のデータのフォーマットが次の3パターンのいずれかである場合、 <format> で指定した形式に変換して出⼒する。次の3パターンのいずれでもない場
合、⼊⼒データをそのまま出⼒する。フォーマットは桁数のみを検証し、年⽉⽇時分秒の正当性は評価しない。
yyyymmdd
年⽉⽇(8桁)HHMMSS
時分秒(6桁)yyyymmddHHMMSS
年⽉⽇時分秒(14桁)<format> でm, d, H, M, Sを単独で指定した場合、前0は削除される。

オプション -r を指定すると逆変換を実施する。標準⼊⼒または⼊⼒ファイル <file> の指定フィール
ド <field> のデータが、 <format> で指定されたフォーマットに⼀致する場合、次のいずれかの形式へ変換する。⼀致しない場合、⼊⼒データをそのまま出⼒する。
yyyymmdd
年⽉⽇(8桁)HHMMSS
時分秒(6桁)yyyymmddHHMMSS
年⽉⽇時分秒(14桁)
フォーマットのみを検証し、年⽉⽇時分秒の正当性は評価しない。
【例1】$ echo 20120304 | dayslash yyyy/mm/dd 1
2012/03/04$ echo 050607 | dayslash H時M分S秒 1
5時6分7秒$ echo 20111201235958 | dayslash m/d 1
12/1$ echo - | dayslash yyyy/mm/dd 1$【例2】$ echo 2012/03/04 | dayslash -r yyyy/mm/dd 1
20120304$ echo 5時6分7秒 | dayslash -r H時M分S秒 1
050607$ echo 2011年12⽉1⽇_23:59:10 | dayslash -r yyyy年m⽉d⽇_HH:MM:SS 1
20111201235910$【関連項⽬】

calclock(1) 、 mdate(1) 、 yobi(1)34delf(1)【名前】
delf : 指定したフィールドを除いて出⼒
【書式】

Usage

: delf f1 f2 ... [file]: delf -d f1 f2 ... string
Version : Thu Apr 21 00:58:47 JST 2022
Edition : 1【説明】file から、指定したフィールドだけを除いて出⼒する(delf=delete field)。 self(1) とは逆の動作となる。

ファイル名指定なし、あるいは、ファイル名が-の時は標準⼊⼒を期待する。
【オプション】-d : ダイレクトモード⽂字列 <string> に delf を適⽤する。
【例1】$ cat data
0000000 浜地______ 50 F
0000001 鈴⽥______ 50 F
0000003 杉⼭______ 26 F
0000004 ⽩⼟______ 40 M
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000008 ⾓屋______ 50 F
0000009 ⽶原______ 68 F
0000010 柳本______ 50 F
0000011 安武______ 55 F
$

←元データ

$ delf 2 data
0000000 50 F
0000001 50 F
0000003 26 F
0000004 40 M
0000005 50 F
0000007 42 F
0000008 50 F
0000009 68 F
0000010 50 F
0000011 55 F$

←第2フィールドを除いて出⼒する。

【例2】$ delf NF data
0000000 浜地______ 50
0000001 鈴⽥______ 50
0000003 杉⼭______ 26
0000004 ⽩⼟______ 40
0000005 崎村______ 50
0000007 梶川______ 420000008 ⾓屋______ 50
0000009 ⽶原______ 68
0000010 柳本______ 50
0000011 安武______ 55$【例3】$ delf 2/3 data
0000000 F
0000001 F
0000003 F
0000004 M
0000005 F
0000007 F
0000008 F
0000009 F
0000010 F
0000011 F
$

35

【注意】

⼊⼒ファイルが改⾏⽂字で終了していない場合、つまり⾏が尻切れになっている場合は、ファイル末尾に改⾏⽂字が追加されて完結した⾏になる。
実⾏時パラメータの最後尾が実際に存在するファイルの名前であればそれを⼊⼒ファイルとして開く。このファイル名は「10」のような数字列であってもかまわない。最後尾が存在するファイル名でないときはそれをフィールドとして処理し、⼊⼒ファイル名は省略されたものとして標準⼊⼒(stdin)を使⽤する。
【関連項⽬】

self(1)36

delr(1)【名前】
delr : フィールドが完全⼀致した⾏を除いて出⼒する
【書式】

Usage
: delr <field> <str> <file>
Version : Sun Nov 21 17:29:32 JST 2021
Open usp Tukubai (LINUX+FREEBSD/PYTHON2.4/UTF-8)
Edition : 1【説明】

引数のファイルのテキストデータより、指定したフィールドが指定した⽂字列と完全⼀致した⾏を除いて出⼒します。ファイル名が省略された時及び "-" の時は標準⼊⼒から⼊⼒します。
【例１】 指定したフィールドが完全⼀致した⾏を除いて出⼒する$ cat data
0001 a0002 b0003 c0004 c$ delr 1 "0001" data
0002 b0003 c0004 c【例２】$ delr 2 c data
0001 a0002 b37

divsen(1)【名前】
divsen : 指定フィールドを1,000で除算
【書式】

Usage
: divsen [-s] [<f1> <f2> ...] [<file>]
Version : Fri Aug 20 22:29:15 JST 2022
【説明】

引数のファイルまたは標準⼊⼒のテキストデータの数値を1,000で除算し出⼒する。千単位の表を作成する場
合などに使⽤する。引数において1,000で除算する各フィールドを順に指定する。なお、⼩数点以下の数値は四捨五⼊される。 -s オプションを指定すると四捨五⼊せず、⼩数点の値をそのまま出⼒する。
<file> として - を指定するかまたは省略すると標準⼊⼒を使⽤する。フィールド指定 <f1> <f2> ... を省略すると全フィールド指定となる。フィールド指定 <f1> <f2> ... にひとつでも0があると全フィールド指定となる。コマンド⼊⼒が「 divsen -s 」であったときは標準⼊⼒に対して全フィールドを1,000で除算し⼩数点以下を四捨五⼊せずに表⽰するコマンド⼊⼒が「 divsen 」であったときはコマンドの構⽂を表⽰して終了する【例1】$ cat data
20060201 296030 6710000
20060202 1300100 3130000
20060203 309500 20100
20060204 16300 300100
20060205 41000 210000
20060206 771100 400000$$ divsen 2 3 data
20060201 296 6710
20060202 1300 3130
20060203 310 20
20060204 16 300
20060205 41 210
20060206 771 400$←2フィールドと3フィールドを1,000で除算-s を指定して⼩数点まで表⽰させる。こうしたデータは以降で marume(1) などを使って加⼯する。

$ divsen -s 2 3 data
20060201 296.030 6710.000
20060202 1300.100 3130.000
20060203 309.500 20.100
20060204 16.300 300.100
20060205 41.000 210.000
20060206 771.100 400.000$←⼩数点まで表⽰【ワンポイント】
divsen された結果をさらにパイプでつないで divsen を実⾏すると、100万単位のデータを作成すること

ができる。
【注意】
<file> を省略するときは注意が必要 divsen 1 10の実⾏において もし「10」という数字名のファイルが存在すると 標準⼊⼒ファイルの第1および第10フィールドを1,000で除算するという動作を「しない」で 「10」というファイルの第1フィールドを1,000で除算するという動作を「する」最後のパラータが「存在するファイルの名前」であればこれを⼊⼒ファイル指定としそうでなければフィールド指定として処理し⼊⼒ファイル指定は省略されたとして標準⼊⼒を仮定する【関連項⽬】

marume(1)38exist(1)【名前】
exist : 複数ファイルの存在チェック
【書式】

Usage
: exist [-v] <file1> <file2> ...
Version : Fri Oct 21 11:26:06 JST 2011
Edition : 1【説明】<file1> <file2> ... すべてのファイルが存在すれば正常終了、それ以外はエラー終了します。
【例１】$ touch file.{1..5}$ exist file.{1..5} && echo ok > result$ cat resultok【例２】$ touch file.{1..5}$ exist file.{1..6} || echo ng > result$ cat resultng<-- file.6 は無いのでエラー【例３】

ワイルドカードの展開に成功したら正常終了します。
$ touch a{1..5}$ exist a* && echo ok > result$ cat result<-- "a" から始まるファイル名があれば成功

39

extname(1)【名前】
extname : パス名からサフィックスを取り出す
【書式】

Usage
: extname <pathname>Version : Fri Oct 21 11:26:06 JST 2011
Edition : 1【説明】extname コマンドは指定した <pathname> からサフィックスを出⼒します。
【例１】$ extname /home/usp/hogehoge.cc【参考】basename コマンド: パスを取り除き、ファイル名のみ取り出す
dirname コマンド: パスの中からディレクトリ名のみ取り出す
rootname コマンド: パスの中からサフィックスを取り除く（USPコマンド）
extname コマンド: パスの中からサフィックスを取り出す（USPコマンド）40

filehame(1)【名前】
filehame : テンプレートにファイルをはめ込み
【書式】

Usage
: filehame -l<string> <template> [<data>]
Version : Oct 20 17:32:09 JST 2022
Edition : 1【説明】<template> ファイル中で⽂字列 <string> が含まれる⾏を <data> ファイルの中⾝に置き換える。
【例1】$ cat template<html><meta><!-- label1 --></meta><body><!-- label2 --></body></html>$$ cat data1<script type="javascript/text">
function sb(i) {submit(getElementById(i))}</script>$$ cat data2<input id="123" type="button" onclick=sb('123') value="push" />$$ filehame -llabel1 template data1 | filehame -llabel2 - data2<html><meta><script type="javascript/text">
function sb(i) {submit(getElementById(i))}</script></meta><body><input id="123" type="button" onclick=sb('123') value="push" /></body></html>$【関連項⽬】

formhame(1) 、 mojihame(1)41formhame(1)【名前】
formhame : HTML テンプレートに⽂字をはめ込む
【書式】

Usage
Option: formhame <html_template> <data>: -i<c>: -d<c>Version : Tue Jun 28 07:39:19 JST 2022
Edition : 1【説明】<html_template> ファイルの各種inputタグ(text, radio,checkbox, hidden)とtextareaタグ、selectタグの部分に <data> ファイル(第1フィールド:タグ名、第2フィールド以降:値)で指定される値を挿⼊する。
【例】$ cat html
<html><body><form name="name_form"><input type="text" name="name_text1" /><input type="text" name="name_text2" /><input type="radio" name="name_radio" value="a"/><input type="radio" name="name_radio" value="b"/><input type="checkbox" name="name_checkbox" value="x"/><input type="checkbox" name="name_checkbox" value="y"/><textarea name="name_textarea"></textarea><select name="name_pulldown"><option value="pd1">pd1</option><option value="pd2">pd2</option><option value="pd3">pd3</option></select><input type="submit" name="submit" /></form></body></html>$$ cat data
name_text1 hello
name_text2
name_radio b
name_checkbox y
name_textarea usp\nlaboratory
name_pulldown pd3$$ formhame html data
<html><body><form name="name_form"><input type="text" name="name_text1" value="hello"/><input type="text" name="name_text2" /><input type="radio" name="name_radio" value="a"/><input type="radio" name="name_radio" value="b" checked="checked" /><input type="checkbox" name="name_checkbox" value="x"/><input type="checkbox" name="name_checkbox" value="y" checked="checked" /><textarea name="name_textarea">usp
laboratory</textarea><select name="name_pulldown"><option value="pd1">pd1</option><option value="pd2">pd2</option><option value="pd3" selected="selected">pd3</option></select><input type="submit" name="submit" /></form></body></html>
$
【備考】

42

1. inputタグの場合、すでに value="" とテンプレートに記述している場合は、値を置換する。同様に
textareaタグの場合も値を置換する。selectタグの場合は、すでに selected="selected" とテンプレートに指定されている場合、指定場所を移動する。
2. textareaの場合、すでにある値を置換する。 \n は改⾏に置換する。
3. 値が無い場合、値は挿⼊されない。
4. -i オプションで⽂字列を指定すると、その⽂字列に等しい値はヌル⽂字列にして挿⼊する。
5. -d オプションで⽂字列を指定すると、値の中の指定⽂字列部分は半⾓空⽩⽂字に置換して挿⼊する。ただし、\指定⽂字列という部分は半⾓空⽩ではなく(\をとった)指定⽂字列に置換して挿⼊する。
6. -i オプションと -d オプションの両⽅が指定された場合、 -i オプションによる処理を先に⾏なう。
7. HTMLは正しく記述されている必要がある。タグは <タグ /> あるいは、 <タグ> </タグ> と記述される必要がある。変数は必ず " " で囲まれている必要がある( value="1" など)。 input
type="checkbox" のときは、必ず value="XXX" が指 定されている必要がある。
8. checkbox 、 radiobox 、 selectbox の複数選択の場合は、ネーム形式データ(5)は次のように1つのタグに対して複⾏となる。
name_radio a
name_radio b
name_checkbox x
name_checkbox y
name_pulldown pd1
name_pulldown pd2【関連項⽬】

filehame(1) 、 mojihame(1)43fpad(1)【名前】
fpad : フィールドのパディング
【書式】

Usage
: fpad [-t] 
 <n> [<file>]
Version : Sat Oct 8 17:55:00 JST 2022
Edition : 1【説明】<file> ファイルの各レコードが <n> フィールド未満の時、⽂字列 
 で残フィールドを埋めます。
<file> ファイルの指定が無いとき、あるいはファイル名が "-" の時は、標準⼊⼒から読み込みます。
-t オプションを指定すると、レコードが <n> フィールドを超える時、超えたフィールドを削除します。

( -t は truncate の略)【例１】$ cat data
a
a a
a a a
a a a aa a a a a
$ fpad _ 4 dataa _ _ _
a a _ _
a a a _
a a a aa a a a a
【例２】

$ fpad -t _ 4 dataa _ _ _
a a _ _
a a a _
a a a aa a a a44

fromcsv(1)【名前】
fromcsv : CSVフィルター
【書式】

Usage
Option: fromcsv [<file>]: -n <null_string>-s <space_character>-e-qVersion : Tue Sep 13 17:11:29 JST 2022
【説明】

CSVファイルをスペース区切りのファイルに変換します。ファイル名を指定しない時、または ' - ' の時は標準⼊⼒を読み込みます。
【仕様】

1. 空の⽂字列は0に変換します。
2. ⽂字列1の中の "" は " に変換します。
3. ⽂字列の中の半⾓スペースは、_ に変換します。 -s オプションで_を別の1バイト⽂字に変更できます。
4. -e オプションを指定すると、_(または -s オプションで指定した⽂字)\ には \ を前置します。
5. -q オプションを指定すると、\" は " に、\\ は \ に変換します。
6. ⾏末の \r \n は⾃動的に \n に変換します。
7. ⽂字列1内の改⾏は " \n " と変換します。
8. 最終⾏は改⾏が無くても構いません。
【例1】$ cat data,"",3,"a_b","cdef\gh","i j","k,""l"$ fromcsv data
0 _ 3 a_b cde\nf\gh i_j k,"l$ fromcsv -e data
0 _ 3 a\_b cde\nf\\gh i_j k,"l【関連項⽬】

tocsv(1)45fsed(1)【名前】
fsed : フィールドの⽂字列の置換
【書式】

Usage
: fsed [-e|-i] 's/<org>/<new>/<n>'... <file>
Version : Sun Feb 21 04:35:05 JST 2021
Edition : 1【説明】ファイル <file> のフィールド <n> の中で、⽂字列 <org> を⽂字列 <new> に置換します。 <n> に 'g' を指定すると、全フィールドの指定になります。
-e オプションを使うと <org> を正規表現と解釈します。 -i オプションを使うと⼤⽂字／⼩⽂字を区別しない正規表現になります。
置換指定は複数指定できます。この場合、 -e / -i オプションは、正規表現を使う置換指定毎に指定する必要があります。
【例１】

第１フィールドの tokyo を TOKYO に、第３フィールドの osaka をOSAKAに置換します。
$ cat data1
tokyo 1234 tokyo 5678
osaka 1234 osaka 5678
$ fsed 's/tokyo/TOKYO/1' 's/osaka/OSAKA/3' data1
TOKYO 1234 tokyo 5678
osaka 1234 OSAKA 5678
【例２】

全フィールドの tokyo を yokohama に置換します。
$ fsed 's/tokyo/yokohama/g' data1
yokohama 1234 yokohama 5678
osaka 1234 osaka 5678
【例３】

正規表現を使います。
$ cat data3
Tokyo 1234
tokyo 5678
TOKYO 7777
$ fsed -e 's/^[Tt]okyo$/東京/1' data3
東京 1234
東京 5678
TOKYO 7777
【例４】

⼤⽂字／⼩⽂字を区別しない正規表現を使います。
$ fsed -i 's/^tokyo$/東京/1' data3
東京 1234
東京 5678
東京 7777【例５】

複数の置換指定を使います。
$ fsed 's/tokyo/横浜/1' -i 's/tokyo/川崎/1' data3
川崎 1234
横浜 5678
川崎 7777【例６】

置換指定の区切り⽂字 '/' を置換対象にする場合。

46

$ cat data6
001 /home/MANUAL/TOOL/fsed.txt
data6 の中で、 '/' を ' - ' に置換する場合、置換指定の区切り⽂字を '/' 以外の⽂字(本例では ',' )にします。この⽂字には、任意の ASCII ⽂字を指定できます。
$ fsed 's,/,-,2' data6
001 -home-MANUAL-TOOL-fsed.txt
区切り⽂字は '/' のままにしておいて、パターン中の '/' に '\' を前置してもよいです。
$ fsed 's/\//-/2' data6
001 -home-MANUAL-TOOL-fsed.txt

47

getfirst(1)【名前】
getfirst : 同⼀キーの最初の⾏を出⼒
【書式】

Usage
: getfirst [+ng[<fd>]] <n1> <n2> <file>
Version : Sat Sep 19 23:49:26 JST 2020
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータに対し、指定されたキーフィールドの値が同⼀の⾏が複数ある場合に、キーフィールドごとに最初の⾏のみを抽出して出⼒する。
【例1】$ cat date
←元データ 商品コード 商品名 販売⽇ 売れ数0000007 セロリ 20060201 117
0000007 セロリ 20060202 1360000007 セロリ 20060203 221
0000017 練⾺⼤根 20060201 31
0000017 練⾺⼤根 20060202 127
0000017 練⾺⼤根 20060203 514
0000021 温州みかん 20060201 90
0000021 温州みかん 20060202 3240000021 温州みかん 20060203 573
0000025 プリンスメロン 20060201 129
0000025 プリンスメロン 20060202 493
0000025 プリンスメロン 20060203 391
0000030 じゃが芋 20060201 575
0000030 じゃが芋 20060202 541
0000030 じゃが芋 20060203 184$$ getfirst 1 2 data
←同⼀商品コード/商品名の最初の⾏のみ出⼒0000007 セロリ 20060201 117
0000017 練⾺⼤根 20060201 31
0000021 温州みかん 20060201 90
0000025 プリンスメロン 20060201 129
0000030 じゃが芋 20060201 575$【例2】" +ng "オプションを指定すると、同じキーフィールドの値を持つ⾏の最初の⾏以外を標準エラー出⼒に出⼒する。
$ getfirst +ng 1 2 data > /dev/null 2> data2$ cat data2
0000007 セロリ 20060202 1360000007 セロリ 20060203 221
0000017 練⾺⼤根 20060202 127
0000017 練⾺⼤根 20060203 514
0000021 温州みかん 20060202 3240000021 温州みかん 20060203 573
0000025 プリンスメロン 20060202 493
0000025 プリンスメロン 20060203 391
0000030 じゃが芋 20060202 541
0000030 じゃが芋 20060203 184$【例3】+ng オプションに <fd> を指定すると、標準エラー出⼒のかわりに <fd> への出⼒が実施される。

48

$ getfirst +ng4 1 2 data > /dev/null 4> data2$ cat data2
0000007 セロリ 20060202 1360000007 セロリ 20060203 221
0000017 練⾺⼤根 20060202 127
0000017 練⾺⼤根 20060203 514
0000021 温州みかん 20060202 3240000021 温州みかん 20060203 573
0000025 プリンスメロン 20060202 493
0000025 プリンスメロン 20060203 391
0000030 じゃが芋 20060202 541
0000030 じゃが芋 20060203 184$【注意】

フィールド分割において連続する空⽩は1つの空⽩とみなされる。また、⾏頭の空⽩は無視される。例えば、
キーフィールド指定が1と2の場合、次の2⾏は同じキーフィールドを持つとみなされる。
0000007 セロリ 20060202 1360000007 セロリ 20060203 221【関連項⽬】

ctail(1) 、 getlast(1) 、 tcat(1) 、 ycat(1)49getlast(1)【名前】
getlast : 同⼀キーの最後の⾏を出⼒
【書式】

Usage
: getlast [+ng] <n1> <n2> <file>
Version : Sat Sep 19 23:49:26 JST 2020
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータに対し、指定されたキーフィールドの値が同⼀の⾏が複数ある場合に、キーフィールドごとに最後の⾏のみを抽出して出⼒する。 <file> として - を指定すると標準⼊⼒を使⽤する。
【例1】$ cat data
000000700000070000007000001700000170000017000002100000210000021000002500000250000025000003000000300000030$←元データ 商品コード 商品名 販売⽇ 売れ数
セロリ 20060201 117
セロリ 20060202 136
セロリ 20060203 221
練⾺⼤根 20060201 31
練⾺⼤根 20060202 127
練⾺⼤根 20060203 514
温州みかん 20060201 90
温州みかん 20060202 324
温州みかん 20060203 573
プリンスメロン 20060201 129
プリンスメロン 20060202 493
プリンスメロン 20060203 391
じゃが芋 20060201 575
じゃが芋 20060202 541
じゃが芋 20060203 184$ getlast 1 2 data
0000007
セロリ 20060203 221
0000017
練⾺⼤根 20060203 514
0000021
温州みかん 20060203 573
0000025
プリンスメロン 20060203 391
0000030
じゃが芋 20060203 184$【例2】" +ng "オプションを指定すると、同じキーフィールドの値を持つ⾏の最後の⾏以外を標準エラー出⼒に出⼒する。
$ getlast +ng 1 2 data > /dev/null 2> data2$ cat data2
0000007
セロリ 20060201 117
0000007
セロリ 20060202 1360000017
練⾺⼤根 20060201 31
0000017
練⾺⼤根 20060202 127
0000021
温州みかん 20060201 90
0000021
温州みかん 20060202 3240000025
プリンスメロン 20060201 129
0000025
プリンスメロン 20060202 493
0000030
じゃが芋 20060201 575
0000030
じゃが芋 20060202 541$【関連項⽬】

ctail(1) 、 getfirst(1) 、 tcat(1) 、 ycat(1)50gyo(1)【名前】
gyo : ⾏をカウント
【書式】

Usage
: gyo [-f] [<file> ...]
Version : Tue Sep 6 08:55:48 JST 2022
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータの⾏数(⾏数)をカウントして出⼒する。 <file> として - を指定すると標準⼊⼒を使⽤する。
【例1】$ cat data
0000000 浜地______ 50 F 91 59 20 76 540000001 鈴⽥______ 50 F 46 39 8 5 210000003 杉⼭______ 26 F 30 50 71 36 300000004 ⽩⼟______ 40 M 58 71 20 10 60000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2 33 15 62$$ gyo data
6
$
【例2】

複数のファイルの⾏数を⼀度にカウントできる。
$ cat data1
1 file1
2 file1
3 file1$$ cat data2
1 file2
2 file2$$ cat data3
1 file3
2 file3
3 file3
4 file3$$ gyo data1 data2 data3
3
2
4
$
【例3】

" -f "オプションを使⽤するとファイル名と⾏数をそれぞれ表⽰する。
$ gyo -f data1 data2 data3
data1 3
data2 2
data3 4$
【備考】

ファイル名に - を指定すると標準⼊⼒ファイルを期待する。
$ cat data2 |data1 3
data2 2
data3 4$gyo -f data1 - data351

【関連項⽬】

count(1) 、 juni(1) 、 rank(1) 、 retu(1)52haba(1)【名前】
haba : 表⽰幅をだす
【書式】

Usage
: haba [-vf] <file1> <file2>...
Version : Wed May 20 04:47:48 JST 2020
Edition : 1【説明】

半⾓⽂字の表⽰幅を１として、引数のファイルの表⽰幅を出します。ファイルは複数指定できます。(註) 半⾓
オーバ－ライン「‾」(U+203e)は表⽰幅は１(半⾓幅)と判定され、 テキストエディター等でも半⾓幅で表⽰されるが、 コマンド実⾏をするウィンドウによっては表字幅２(全⾓幅)で表⽰されることがある。
【例１】

指定ファイルの表⽰幅を出します。
$ cat data
1234
東京
ｵｵｻｶ
オオサカ
$ haba data
4
4
4
8
【例２】
-v オプションで表⽰幅に変化のあった⾏番号と表⽰幅を出⼒します。

$ hava -v data
1 4
4 8<--- １⾏⽬からは表⽰幅４<--- ４⾏⽬からは表⽰幅８【例３】-f オプションでファイル名もあわせて出⼒します。標準⼊⼒の場合は、ファイル名は STDIN となります。 -v オプションと併⽤すると、ファイル名、⾏番号、表⽰幅の順になります。
$ cat file1
1234$ cat file2
abcdef$ haba -f file1 file2
file1 4
file2 6$ haba -vf file1 file2
file1 1 4
file2 1 6
$ cat file1 | haba -f - file2
STDIN 4
file2 6
【参考】$ cat data
1234
東京
ｵｵｻｶ
$ awk '{print length($0)}' data<-- 半⾓・全⾓問わず⽂字数がでる。
42
4$ LANG=C awk '{print length($0)}' data <-- バイト数がでる。
4
6
12

53

han(1)【名前】
han : 半⾓へ変換
【書式】

Usage

: han f1 f2 .. [file]han -d string
Version : Oct 20 17:32:09 JST 2022
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータの、全⾓スペース、全⾓英数記号およびカタカナの部分をすべて半⾓に変換して出⼒する。フィールド指定において0は全フィールドを意味する。コマンド⼊⼒が「 han 」でパラメータがないときはコマンドの構⽂を表⽰して終了する。
【例1】

引数のファイルの指定したフィールドの中⾝を半⾓に変換する。
$ cat data
これは データ である。
Ｔｈｉｓ ｉｓ ｄａｔａ
１２３４ ５６７ ８９０$$ han 1 2 3 data
これは ﾃﾞｰﾀ である｡
This is data
1234 567 890$【例2】

フィールドを指定しないと⾏全体を半⾓にする。全⾓スペースは半⾓スペースになる。
$ cat data2
これはデータである。
全⾓ スペース データも変換する。
１２３456７８９$$ han data2
これはﾃﾞｰﾀである｡
全⾓ ｽﾍﾟｰｽ ﾃﾞｰﾀも変換する｡
123456789【例3】-d オプションを使⽤すると、引数で指定した⽂字列の全⾓部分を半⾓に変えて出⼒させることができる。

$ han -d カタカナＡＢＣ１２３
ｶﾀｶﾅABC123$【注意】

実⾏時パラメータの最後尾が実際に存在するファイルの名前であればそれを⼊⼒ファイルとして開く。このファイル名は「10」のような数字列であってもかまわない。最後尾が存在するファイル名でないときはそれをフィールドとして処理し、⼊⼒ファイル名は省略されたものとして標準⼊⼒(stdin)を使⽤する。
【関連項⽬】

zen(1)

54

isdate(1)【名前】
isdate : ８桁⽇付のチェック
【書式】

Usage
: isdate <date>
Version : Wed May 20 04:47:48 JST 2020
Edition : 1【説明】

引数の８桁⽇付が存在する⽇付であれば正常終了し、そうでなければ、異常終了(ステータス１)する。
【例】$ isdate 20090101$ echo $?
0$ isdate 20090199$ echo $?
1【備考】

閏年について ４で割れる年は閏年。(２⽉は２９⽇まで) ただし１００で割れる年は、閏年でない。(２⽉は２８⽇まで) さらに、ただし４００で割れる年は閏年。(２⽉は２９⽇まで)【バグ】

１７５２年９⽉は３⽇から１３⽇は存在しないが、これをエラーとはしていない。ユリウス歴からグレゴリオ
歴に移⾏した⽉で差分を合わせるために⽇付がとんでいる。($ cal 9 1752 で確認できる)55

itouch(1)【名前】
itouch : ファイルの初期化を⾏う
【書式】

Usage

: itouch [-<n>] "<string>" <file1> <file2>...
: itouch [-<n>] -f <file> <file1> <file2>...
Version : Thu Aug 20 20:30:32 JST 2015
Edition : 1【説明】

指定ファイルが存在しない、あるいは０バイトならば、 <string> あるいは <file> でファイルの中⾝を初期化します。 -<n> で数字を指定すると <n> ⾏分の <string> あるいは <n> 回分の <file> で初期化します。初期化するファイルは複数指定できます。ファイルが存在して０バイトで無い場合は何もしません。指定
ファイルが "-" のときは、標準⼊⼒を期待し、結果を標準出⼒に出⼒します。
【例１】$ cat filecat: file: No such file or directory$ itouch '000 000 0' file$ cat file000 000 0$ itouch 'abc abc 0' file<-- ファイルが存在しないか０バ
イトの場合<-- 指定⽂字列で初期化される<-- ファイルが存在して０バイトでない場合$ cat file000 000 0【例２】$ : > file
$ itouch -3 '000 000 0' file$ cat file000 000 0
000 000 0
000 000 0<-- ３⾏初期化【例３】$ : > file
$ itouch 'a\nb\nc' file$ cat fileabc<-- '\n' は改⾏に置換される【例４】$ cat file1$ cat file1 | itouch '000 0' - > result$ cat result
000 0$ cat file2
ABC D$ cat file2 | itouch '000 0' - > result$ cat result
ABC D<-- 標準⼊⼒から０バイト
ファイルを読む<-- 標準⼊⼒から中⾝のあるファイルを読む【例５】$ : > file$ echo abc > init
$ itouch -f init file$ cat fileabc<-- 初期化⽤のファイルを準備する<-- 初期化ファイル init で file を初期化する【関連項⽬】

touch (1) (https://linuxjm.osdn.jp/html/gnumaniak/man1/touch.1.html)

56

join0(1)【名前】
join0 : マスタファイルにキーフィールドが⼀致するトランザクションファイルの⾏を抽出
【書式】

Usage
: join0 [+ng[<fd>]] key=<n> <master> [<tran>]
Version : Sun Jun 19 23:55:51 JST 2022
Edition : 1【説明】tranの key=<n> で指定したキーフィールドがmasterの第1フィールド(キーフィールド)と⼀致した⾏のみtranから抽出して出⼒する。
masterに - を指定すると標準⼊⼒をマスタファイルとする。tranが無指定かまたは - が指定されている場合には、標準⼊⼒がトランザクションファイルとなる。
masterの第1フィールドおよびtranの第 <n> フィールドは必ず昇順で整列されていることが条件となる。また、masterのキーフィールド(第1フィールド)はユニークでなければならない。(第1フィールドが同じ値をもつ⾏が複数あってはならない)。tranについてはこの制約はなく、キーフィールド(第 <n> フィールド)が同じ値の⾏はいくつあっても構わない。
キーに選択するフィールドは複数指定することもできる。たとえば key=3/5 のように指定した場合、tranの第3、第4、第5フィールドを意味するようになる。またこの場合、masterのキーは第1、第2、第3フィールドとなる。いずれも、指定したkeyについてmasterもtranも整列されている必要がある。
キー指定にひとつでも0があると全フィールドを指定したことになる+ng オプションをつけると、⼀致した⾏を標準出⼒ファイルへ、⼀致しなかった⾏をファイルデスクリプ

タ <fd> のファイルへ出⼒する。 <fd> を省略した場合は標準エラー出⼒ファイルへ出⼒する。
tran でキーが整列されていないものは join0(1) では処理できない。その場合は⼀旦tranを整列してから join0(1) で処理するか、 join0(1) のかわりに cjoin0(1) を使って処理すればよい。
【例1】基本パターン

成績ファイルkekkaからmasterに登録されている4⼈のデータを抽出する。
$ cat master
0000003 杉⼭______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000010 柳本______ 50 F$
$ cat kekka
0000000 91 59 20 76 540000001 46 39 8 5 210000003 30 50 71 36 300000004 58 71 20 10 60000005 82 79 16 21 80
0000007 50 2 33 15 620000008 52 91 44 9 00000009 60 89 33 18 60000010 95 60 35 93 76
0000011 92 56 83 96 75$
kekkaの第1フィールドがmasterファイルに存在する⾏のみ抽出する。
$ join0 key=1 master kekka
0000003 30 50 71 36 300000005 82 79 16 21 80
0000007 50 2 33 15 620000010 95 60 35 93 76$【例2】

左から順に複数のフィールドに連続するキーを指定できる。例えばmasterファイルに第2フィールドと第3フィールドの順にフィールドキーが存在する⾏のみ抽出する場合、次のようになる。

57

$ cat master
A 0000003 杉⼭______ 26 F
A 0000005 崎村______ 50 F
B 0000007 梶川______ 42 F
C 0000010 柳本______ 50 F$
$ cat kekka
1 A 0000000 91 59 20 76 54
2 A 0000001 46 39 8 5 21
3 A 0000003 30 50 71 36 30
4 A 0000004 58 71 20 10 6
5 A 0000005 82 79 16 21 80
6 B 0000007 50 2 33 15 62
7 B 0000008 52 91 44 9 0
8 C 0000009 60 89 33 18 6
9 C 0000010 95 60 35 93 76
10 C 0000011 92 56 83 96 75$$ join0 key=2/3 master kekka > data
3 A 0000003 30 50 71 36 30
5 A 0000005 82 79 16 21 80
6 B 0000007 50 2 33 15 62
9 C 0000010 95 60 35 93 76$
左から順に連続していない複数のフィールドをキーに指定することも可能。この場合は複数のキーフィールドを@でつなげて指定する。
$ join0 key=3@1 master tran
【例3】+ngオプション

masterとキーが⼀致しない"tran"の⾏を抽出することも可能。キーに⼀致する⾏は標準出⼒に、⼀致しない⾏は標準エラー出⼒に出⼒される。
$ cat master
0000003 杉⼭______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000010 柳本______ 50 F$
$ cat kekka
0000000 91 59 20 76 540000001 46 39 8 5 210000003 30 50 71 36 300000004 58 71 20 10 60000005 82 79 16 21 80
0000007 50 2 33 15 620000008 52 91 44 9 00000009 60 89 33 18 60000010 95 60 35 93 76
0000011 92 56 83 96 75$
成績ファイルkekkaからmasterに存在する4⼈のデータと、その他のデータとをそれぞれ抽出する。
$ join0 +ng key=1 master kekka > ok-data 2> ng-data$ cat ok-data←⼀致したデータ
0000003 30 50 71 36 300000005 82 79 16 21 80
0000007 50 2 33 15 620000010 95 60 35 93 76$ cat ng-data←⼀致しなかったデータ
0000000 91 59 20 76 540000001 46 39 8 5 210000004 58 71 20 10 60000008 52 91 44 9 00000009 60 89 33 18 60000011 92 56 83 96 75$【例4】

ファイル名を-にすることにより標準⼊⼒からmasterやtranを読むことができる。 join1(1) や join2(1) も同様。tranの-を省略した場合も標準⼊⼒からtranを読み込む。
$ cat master | join0 key=1 - tran58

$ cat tran | join0 key=1 master $ cat tran | join0 key=1 master←-を省略可能【コラム1】+ngオプションのコメント - join1(1)も同様

不⼀致のデータをパイプで次のコマンドへつなぐ場合は次のように記述する。
$ join0 +ng key=1 master tran 2>&1 1> ok-data |次のコマンド

不⼀致のデータのみ出⼒したい場合には、⼀致データを/dev/nullへ出⼒させれば良い。
$ join0 +ng key=1 master tran > /dev/null 2> ng-data【コラム2】

join0(1) および join1(1) はmasterと同じキーフィールドを持つtranの⾏を出⼒するが、パイプの⽬詰まりを起こさないようにmasterを読み終わったあと読み残したtranについても最後まで読むように動作する。
$ cat bigfile | join0 key=1 master > ok-data【備考】

keyのフィールドは合わせて128フィールドが最⼤で、1キーフィールドあたり最⼤256[byte]まで指定できる。
【関連項⽬】

cjoin0(1) 、 cjoin1(1) 、 cjoin2(1) 、 join1(1) 、 join2(1) 、 loopj(1) 、 loopx(1) 、 up3(1) 、 マ
スタファイル(5) 、 トランザクションファイル(5)59join1(1)【名前】
join1 : トランザクションファイルにマスタファイルを連結(⼀致した⾏のみ連結)
【書式】

Usage
: join1 [+ng[<fd>]] key=<n> <master> [<tran>]
Version : Sun Jun 19 23:55:51 JST 2022
Edition : 1【説明】tranの key=<n> で指定したキーフィールドがmasterの第1フィールド(キーフィールド)と⼀致した⾏のみtranから抽出して、masterの情報を連結して出⼒する。連結はtranのキーフィールドの直後にmasterの内容を挿⼊連結する形で実施される。
masterに - を指定すると標準⼊⼒をマスタファイルとする。tranが無指定かまたは - が指定されている場合には、標準⼊⼒がトランザクションファイルとなる。
masterの第1フィールドおよびtranの第 <n> フィールドは必ず昇順で整列されていることが条件となる。また、masterのキーフィールド(第1フィールド)はユニークでなければならない。(第1フィールドが同じ値をもつ⾏が複数あってはならない)。tranについてはこの制約はなく、キーフィールド(第 <n> フィールド)が同じ値の⾏はいくつあっても構わない。
キー指定にひとつでも0があると全フィールドを指定したことになる+ng <fd> オプションを使うことで、⼀致した⾏を標準出⼒ファイルへ、⼀致しなかった⾏をファイルデス

クリプタ <fd> のファイルへ出⼒することが可能。 <fd> を省略した場合は標準エラー出⼒へ出⼒する。
tran でキーが整列されていないものは join1(1) では処理できない。その場合は⼀旦tranを整列してから join1(1) で処理するか、 join1(1) のかわりに cjoin1(1) を使って処理すればよい。
【例1】基本パターン

経費ファイルkeihiからmasterに登録されている4⼈のデータを抽出し、マスタファイルの内容を連結する。
$ cat master
0000003 杉⼭______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000010 柳本______ 50 F$
$ cat keihi
20070401 0000001 300
20070403 0000001 500
20070404 0000001 700
20070401 0000003 200
20070402 0000003 400
20070405 0000003 600
20070401 0000005 250
20070402 0000005 450
20070402 0000007 210
20070404 0000007 410
20070406 0000007 610$
keihiの第2フィールドをキーにしてmasterを結合する。masterに存在するキーをもつ⾏にしか連結を⾏わない。
存在しない⾏は捨てられる。keihiは同じキーを持つ⾏が複数⾏あっても構わない。
$ join1 key=2 master keihi
20070401 0000003 杉⼭______ 26 F 200
20070402 0000003 杉⼭______ 26 F 400
20070405 0000003 杉⼭______ 26 F 600
20070401 0000005 崎村______ 50 F 250
20070402 0000005 崎村______ 50 F 450
20070402 0000007 梶川______ 42 F 210
20070404 0000007 梶川______ 42 F 410
20070406 0000007 梶川______ 42 F 610$【例2】

左から順に連続した複数のフィールドをキーに指定する場合は次のように実⾏する。kekkaファイルの第260

フィールド、第2フィールドをキーにして(第2、第3フィールド順に整列されている)masterファイル(第1、第2フィールドの順に整列されている)に存在する⾏のみ抽出して、masterの内容を連結して出⼒している。
$ cat master
A 0000003 杉⼭______ 26 F
A 0000005 崎村______ 50 F
B 0000007 梶川______ 42 F
C 0000010 柳本______ 50 F$
$ cat kekka
1 A 0000000 91 59 20 76 54
2 A 0000001 46 39 8 5 21
3 A 0000003 30 50 71 36 30
4 A 0000004 58 71 20 10 6
5 A 0000005 82 79 16 21 80
6 B 0000007 50 2 33 15 62
7 B 0000008 52 91 44 9 0
8 C 0000009 60 89 33 18 6
9 C 0000010 95 60 35 93 76
10 C 0000011 92 56 83 96 75$$ join1 key=2/3 master kekka
3 A 0000003 杉⼭______ 26 F 30 50 71 36 30
5 A 0000005 崎村______ 50 F 82 79 16 21 80
6 B 0000007 梶川______ 42 F 50 2 33 15 62
9 C 0000010 柳本______ 50 F 95 60 35 93 76$
左から順に連続していない複数のフィールドをキーに指定することも可能。この場合は複数のキーフィールドを@でつなげて指定する。なお次の例の場合には、tranは第4、第2フィールドの順に整列され、masterは第3、第1フィールドの順に整列されていることが必要となる。
$ join1 key=4@2 master tran
【例3】"+ng" オプション

masterとキーに⼀致しない⾏を抽出することも可能。キーに⼀致する⾏は標準出⼒に、⼀致しない⾏は標準エ
ラー出⼒に出⼒される。この場合、⼀致する⾏はマスタファイルと連結されるが、⼀致しない⾏はマスタファイ
ルに存在しないため連結されずそのまま出⼒されることになる。
$ cat master
0000003 杉⼭______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000010 柳本______ 50 F$
$ cat kekka
0000000 91 59 20 76 540000001 46 39 8 5 210000003 30 50 71 36 300000004 58 71 20 10 60000005 82 79 16 21 80
0000007 50 2 33 15 620000008 52 91 44 9 00000009 60 89 33 18 60000010 95 60 35 93 76
0000011 92 56 83 96 75$
成績ファイルkekkaからmasterに登録されている4名のデータとその他のデータはそれぞれ次のように抽出できる。
$ join1 +ng key=1 master kekka > ok-data 2> ng-data$ cat ok-data← ⼀致したデータ
0000003 杉⼭______ 26 F 30 50 71 36 300000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2 33 15 620000010 柳本______ 50 F 95 60 35 93 76$

61

$ cat ng-data
0000000 91 59 20 76 540000001 46 39 8 5 210000004 58 71 20 10 60000008 52 91 44 9 00000009 60 89 33 18 60000011 92 56 83 96 75$←

⼀致しなかったデータ【関連項⽬】

cjoin0(1) 、 cjoin1(1) 、 cjoin2(1) 、 join0(1) 、 join2(1) 、 loopj(1) 、 loopx(1) 、 up3(1) 、 マ
スタファイル(5) 、 トランザクションファイル(5)62join1x(1)【名前】
join1x : キーの値が同じレコードが複数存在するファイル同⼠を連結。
【書式】

Usage
: join1x [+ng[<fd>]] key=<n> <master> [<tran>]
Version : Fri Jul 22 01:09:14 JST 2022
【説明】

テキストファイル <tran> の "key=<n>" で指定したキーフィールドがマスターファイル <master> の第１フィールド(キーフィールド)とマッチした⾏のみを <tran> から抽出して、 <master> の情報を連結して出⼒します。連結は <tran> のキーフィールドの直後に <master> の内容のうちキーフィールド以外を挿⼊する形
で⾏われます。
複数のキーフィールドがある場合、 <master> のキーフィールドは、 <tran> のキーフィールドと同じ並びで、最⼩フィールドが１となるようスライドさせたキーフィールドとなります。例えば、 key=3/5 のときは、並び＝３フィールド連続したキー、なので、 <master> は１から３連続したフィールド、つまり、第１から第３フィールドがキーとなります。
masterまたはtranに - を指定すると標準⼊⼒を使⽤する。tranが無指定の場合には標準⼊⼒を使⽤する。
<master> の第１フィールドおよび <tran> のキーフィールドについては必ず昇順でソートされていることが条件になります。
+ng オプションをつけると、⼀致した⾏を標準出⼒ファイルへ、⼀致しなかった⾏をファイルディスクリプ

タ <fd> のファイルへ出⼒する。 <fd> を省略した場合は標準エラー出⼒ファイルへ出⼒する。
join1 との違いは、マスターファイルのキーフィールドの値が同⼀のレコードが複数存在できる点です。マスターとトランザクションファイルのキーフィールド値が同⼀のレコード同⼠を総掛けで連結して出⼒します。
【例１】(マスター：master)$ cat master
1 東京1
1 東京2
2 ⼤阪1
2 ⼤阪2
(トランザクション：tran)$ cat tran
1 新宿
1 上野
2 梅⽥
2 難波
2 京橋
3 ⾦⼭
3 栄
3 熱⽥
4 博多
4 天神
$ join1x key=1 master tran > data
$ cat data
1 東京1 新宿
1 東京2 新宿
1 東京1 上野1 東京2 上野
2 ⼤阪1 梅⽥
2 ⼤阪2 梅⽥
2 ⼤阪1 難波
2 ⼤阪2 難波
2 ⼤阪1 京橋
2 ⼤阪2 京橋63

join2(1)【名前】
join2 : トランザクションファイルにマスタファイルを連結(⼀致しなかった⾏はダミーデータへ置換)
【書式】

Usage
: join2 [-d<string>|+<string>] key=<key> <master> [<tran>]
Version : Sun Jun 19 23:55:51 JST 2022
Edition : 1【説明】tranの key=<n> で指定したキーフィールドがmasterの第1フィールド(キーフィールド)と⼀致した⾏をtranから抽出し、masterの情報を連結して出⼒する。⼀致しない⾏はダミーデータ*を連結して出⼒する。ダミーデータ
は -d オプションまたは+オプションにて指定できる。
masterに - を指定すると標準⼊⼒をマスタファイルとする。tranが無指定かまたは - が指定されている場合には、標準⼊⼒がトランザクションファイルとなる。
masterの第1フィールドおよびtranの第 <n> フィールドは必ず昇順で整列されていることが条件となる。また、masterのキーフィールド(第1フィールド)はユニークでなければならない。(第1フィールドが同じ値をもつ⾏が複数あってはならない)。tranについてはこの制約はなく、キーフィールド(第 <n> フィールド)が同じ値の⾏はいくつあっても構わない。
キー指定にひとつでも0があると全フィールドを指定したことになるtran でキーが整列されていないものは join2(1) では処理できない。その場合は⼀旦tranを整列してから join2(1) で処理するか、 join2(1) のかわりに cjoin2(1) を使って処理すればよい。
【例1】基本パターン$ cat master
0000003 杉⼭______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000010 柳本______ 50 F$
$ cat kekka
0000000 91 59 20 76 540000001 46 39 8 5 210000003 30 50 71 36 300000004 58 71 20 10 60000005 82 79 16 21 80
0000007 50 2 33 15 620000008 52 91 44 9 00000009 60 89 33 18 60000010 95 60 35 93 76
0000011 92 56 83 96 75$
masterに存在しない⾏は次のように*で補完して出⼒される。
$ join2 key=1 master kekka
0000000 ********** ** * 91 59 20 76 540000001 ********** ** * 46 39 8 5 210000003 杉⼭______ 26 F 30 50 71 36 300000004 ********** ** * 58 71 20 10 60000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2 33 15 620000008 ********** ** * 52 91 44 9 00000009 ********** ** * 60 89 33 18 60000010 柳本______ 50 F 95 60 35 93 76
0000011 ********** ** * 92 56 83 96 75$【例2】

左から順に連続した複数のフィールドをキーに指定する場合次のようになる。第2、第3フィールドでキーが⼀致するかどうかをチェックしている。

64

$ cat master
A 0000003 杉⼭______ 26 F
A 0000005 崎村______ 50 F
B 0000007 梶川______ 42 F
C 0000010 柳本______ 50 F$
$ cat kekka
1 A 0000000 91 59 20 76 54
2 A 0000001 46 39 8 5 21
3 A 0000003 30 50 71 36 30
4 A 0000004 58 71 20 10 6
5 A 0000005 82 79 16 21 80
6 B 0000007 50 2 33 15 62
7 B 0000008 52 91 44 9 0
8 C 0000009 60 89 33 18 6
9 C 0000010 95 60 35 93 76
10 C 0000011 92 56 83 96 75$$ join2 key=2/3 master kekka
1 A 0000000 ********** ** * 91 59 20 76 54
2 A 0000001 ********** ** * 46 39 8 5 21
3 A 0000003 杉⼭______ 26 F 30 50 71 36 30
4 A 0000004 ********** ** * 58 71 20 10 6
5 A 0000005 崎村______ 50 F 82 79 16 21 80
6 B 0000007 梶川______ 42 F 50 2 33 15 62
7 B 0000008 ********** ** * 52 91 44 9 0
8 C 0000009 ********** ** * 60 89 33 18 6
9 C 0000010 柳本______ 50 F 95 60 35 93 76
10 C 0000011 ********** ** * 92 56 83 96 75$【例3】+ <string> はダミーデータとして補完する⽂字を指定するオプション。+の後に補完で使⽤する⽂字を指定する。
$ cat master
0000003 杉⼭______ 26 F
0000005 崎村______ 50 F
0000007 梶川______ 42 F
0000010 柳本______ 50 F$
$ cat kekka
0000000 91 59 20 76 540000001 46 39 8 5 210000003 30 50 71 36 300000004 58 71 20 10 60000005 82 79 16 21 80
0000007 50 2 33 15 620000008 52 91 44 9 00000009 60 89 33 18 60000010 95 60 35 93 76
0000011 92 56 83 96 75$$ join2 +@ key=1 master kekka
0000000 @ @ @ 91 59 20 76 540000001 @ @ @ 46 39 8 5 210000003 杉⼭______ 26 F 30 50 71 36 300000004 @ @ @ 58 71 20 10 60000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2 33 15 620000008 @ @ @ 52 91 44 9 00000009 @ @ @ 60 89 33 18 60000010 柳本______ 50 F 95 60 35 93 76
0000011 @ @ @ 92 56 83 96 75$【備考】

masterが0バイトの時は何も連結せずtranそのものを出⼒する。
$ : > master$ join2 key=1 master tran > data
$ cmp tran data
←同じデータが出⼒される
masterのフィールドを保証したい時は、例えば次のようなコードを書く。

65

$ [ ! -s master ] && echo 0000000 0 > master$ join2 key=1 master tran
【関連項⽬】

cjoin0(1) 、 cjoin1(1) 、 cjoin2(1) 、 join0(1) 、 join1(1) 、 loopj(1) 、 loopx(1) 、 up3(1) 、 マ
スタファイル(5) 、 トランザクションファイル(5)66join2x(1)【名前】
join2x : キーの値が同じレコードが複数存在するファイル同⼠を連結。
【書式】

Usage
: join2x [-d<string> | +<string>] key=<key> <master> [<tran>]
Version : Fri Jul 22 01:09:14 JST 2022
【説明】

テキストファイル <tran> の "key=<n>" で指定したキーフィールドがマスターファイル <master> の第１フィールド(キーフィールド)とマッチした⾏を <tran> から抽出して、 <master> の情報を連結して出⼒します。マッチしない⾏は、ダミーデータ "_" をフィールド数分だけ結合して出⼒します。ダミーデータは指定することもできます。
複数のキーフィールドがある場合、 <master> のキーフィールドは、 <tran> のキーフィールドと同じ並びで、最⼩フィールドが１となるようスライドさせたキーフィールドとなります。例えば、 key=3/5 のときは、並び＝３フィールド連続したキー、なので、 <master> は１から３連続したフィールド、つまり、第１から第３フィールドがキーとなります。
masterまたはtranに - を指定すると標準⼊⼒を使⽤する。tranが無指定の場合には標準⼊⼒を使⽤する。
<master> の第１フィールドおよび <tran> のキーフィールドについては必ず昇順でソートされていることが条件になります。
<master> が空ファイル(0バイト)の場合はエラーになります。
join2 との違いは、マスターファイルのキーフィールドの値が同⼀のレコードが複数存在できる点です。マスターとトランザクションファイルのキーフィールド値が同⼀のレコード同⼠を総掛けで連結して出⼒します。
【例１】(マスターファイル：master)$ cat master
1 東京1
1 東京2
2 ⼤阪1
2 ⼤阪2
(トランザクションファイル：tran)$ cat tran
1 新宿
1 上野
2 梅⽥
2 難波
2 京橋
3 ⾦⼭
3 栄
3 熱⽥
4 博多
4 天神
$ join2x key=1 master tran >data$ cat data
1 東京1 新宿
1 東京2 新宿
1 東京1 上野1 東京2 上野
2 ⼤阪1 梅⽥
2 ⼤阪2 梅⽥
2 ⼤阪1 難波
2 ⼤阪2 難波
2 ⼤阪1 京橋
2 ⼤阪2 京橋
3 _ ⾦⼭3 _ 栄
3 _ 熱⽥
4 _ 博多4 _ 天神67

joinx(1)【名前】
joinx : 総掛けで連結する
【書式】

Usage
: joinx <file1> [<file2>]
Version : Sat Sep 24 08:21:57 JST 2022
Edition : 1【説明】

２つのファイルの各レコードを、総てのパターンの掛け合わせを作り連結して出⼒します。引数を指定する順
番に総掛けされます。つまり、 <file1> の各レコードに対し、 <file2> のすべてのレコードが順番に総掛け
されます
【例】

(元データ1：data1)$ cat data1
1 農業
2 ⼯業
3 サービス業(元データ2：data2)$ cat data2
1 東京
2 ⼤阪
3 名古屋
4 福岡
5 札幌
$ joinx data1 data2 > data3（data3）<- data1 と data2 の全レコード同⼠の組み合わせで出⼒
1 農業 1 東京
1 農業 2 ⼤阪
1 農業 3 名古屋
1 農業 4 福岡
1 農業 5 札幌
2 ⼯業 1 東京

68

juni(1)【名前】
juni : 同⼀キー内での順位を出⼒
【書式】

Usage

: juni [<k1> <k2> <file>]: juni -h [<k1> <k2> <file>]
Version : Mon Aug 29 07:54:58 JST 2022
Edition : 2【説明】

第 <k1> フィールドから第 <k2> フィールドまでをキーフィールドとして、同⼀キーの⾏どうしにおける順位を⾏の先頭に挿⼊する。 <k1> <k2> を指定しないときは、すべての⾏が同⼀キーとみなすものとする。この場合は単純に⾏の先頭に⾏番号を挿⼊するのと同じになる。
-h オプションを指定した場合、各キーフィールドの順位を階層的に出⼒する。 <file> として - を指定

すると標準⼊⼒を使⽤する。
【例1】

⾏番号を付与する。
$ cat data
0000007 セロリ 100
0000017 練⾺⼤根 95
0000021 温州みかん 80
0000025 プリンスメロン 70
0000030 じゃが芋 30$$ juni data
1 0000007 セロリ 100
2 0000017 練⾺⼤根 95
3 0000021 温州みかん 80
4 0000025 プリンスメロン 70
5 0000030 じゃが芋 30$【例2】

キーが関係する場合、キーの開始フィールドと終了フィールドを指定して、同⼀キーを持つ⾏どうしにおける順位を⾏頭に付与する。
$ cat data
関東 パスタ 100
関東 おにぎり 90
関東 パン 40
九州 おにぎり 150
九州 パン 140
九州 パスタ 100$$ juni 1 1 data
1 関東 パスタ 100
2 関東 おにぎり 90
3 関東 パン 40
1 九州 おにぎり 150
2 九州 パン 140
3 九州 パスタ 100$【例3】-h オプションを指定した場合、各キーフィールドの順位を階層的に出⼒する。

69

$ cat data
A A1 A11 A111
A A1 A11 A112
A A1 A12 A121
A A1 A12 A122
A A2 A21 A211
A A2 A21 A212
A A2 A22 A221
A A2 A22 A222
B B1 B11 B111
B B1 B11 B112
B B1 B12 B121
B B1 B12 B122
B B2 B21 B211
B B2 B21 B212
B B2 B22 B221
B B2 B22 B222$
$ juni -h 1 3 data
1 1 1 A A1 A11 A111
1 1 1 A A1 A11 A112
1 1 2 A A1 A12 A121
1 1 2 A A1 A12 A122
1 2 1 A A2 A21 A211
1 2 1 A A2 A21 A212
1 2 2 A A2 A22 A221
1 2 2 A A2 A22 A222
2 1 1 B B1 B11 B111
2 1 1 B B1 B11 B112
2 1 2 B B1 B12 B121
2 1 2 B B1 B12 B122
2 2 1 B B2 B21 B211
2 2 1 B B2 B21 B212
2 2 2 B B2 B22 B221
2 2 2 B B2 B22 B222$
【例4】
-h オプションでキーを指定しない場合には、第1フィールドから最終フィールドまでをキーフィールドとみなす。
$ juni -h data
1 1 1 1 A A1 A11 A111
1 1 1 2 A A1 A11 A112
1 1 2 1 A A1 A12 A121
1 1 2 2 A A1 A12 A122
1 2 1 1 A A2 A21 A211
1 2 1 2 A A2 A21 A212
1 2 2 1 A A2 A22 A221
1 2 2 2 A A2 A22 A222
2 1 1 1 B B1 B11 B111
2 1 1 2 B B1 B11 B112
2 1 2 1 B B1 B12 B121
2 1 2 2 B B1 B12 B122
2 2 1 1 B B2 B21 B211
2 2 1 2 B B2 B21 B212
2 2 2 1 B B2 B22 B221
2 2 2 2 B B2 B22 B222
【関連項⽬】

count(1) 、 gyo(1) 、 rank(1) 、 retu(1)70kasan(1)【名前】
kasan : 累計
【書式】

Usage
: kasan [+r] [ref=<ref>] key=<n> <file>
Version : Sat Sep 19 23:49:25 JST 2020
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータの指定したフィールドの値を、各⾏ごとに加算して指定したフィールドの次のフィールドに挿⼊する。累計値を求める場合などに使⽤する。
【例1】

店別の累計の仕⼊れ値を算出する。ここでは4フィールド⽬の値を加算して5フィールド⽬に挿⼊する。
$ cat data
a店 1⽇⽬ 103 62
a店 2⽇⽬ 157 94
a店 3⽇⽬ 62 30
a店 4⽇⽬ 131 84
a店 5⽇⽬ 189 111
a店 6⽇⽬ 350 20
a店 7⽇⽬ 412 301$←店名 ⽇付 売れ数 仕⼊数$ kasan key=4 data
a店 1⽇⽬ 103 62 62
a店 2⽇⽬ 157 94 156
a店 3⽇⽬ 62 30 186
a店 4⽇⽬ 131 84 270
a店 5⽇⽬ 189 111 381
a店 6⽇⽬ 350 20 401
a店 7⽇⽬ 412 301 702$【例2】あるフィールドの値が変わった場所で加算をリセットする場合は、そのリセットのキーとなるフィールドを ref= で指定する。たとえば店別の累計仕⼊数を算出する場合には、次のように1フィールド⽬が変更されるごとに加算をリセットする。
ref=<ref> で指定できるのは数値、範囲(/)、 NF NF -<n> である。

$ cat data
a店 1⽇⽬ 103 62
a店 2⽇⽬ 157 94
a店 3⽇⽬ 62 30
a店 4⽇⽬ 131 84
b店 1⽇⽬ 210 113
b店 2⽇⽬ 237 121
b店 3⽇⽬ 150 82
b店 4⽇⽬ 198 105
c店 1⽇⽬ 81 52
c店 2⽇⽬ 76 49
c店 3⽇⽬ 38 21
c店 4⽇⽬ 81 48$$ kasan ref=1 key=4 data
a店 1⽇⽬ 103 62 62
a店 2⽇⽬ 157 94 156
a店 3⽇⽬ 62 30 186
a店 4⽇⽬ 131 84 270
b店 1⽇⽬ 210 113 113
b店 2⽇⽬ 237 121 234
b店 3⽇⽬ 150 82 316
b店 4⽇⽬ 198 105 421
c店 1⽇⽬ 81 52 52
c店 2⽇⽬ 76 49 101
c店 3⽇⽬ 38 21 122
c店 4⽇⽬ 81 48 17$←店名 ⽇付 売れ数 仕⼊数←累計加算をリセット←累計加算をリセット

71

【例3】

元データのフィールドをその加算値と置き換えて出⼒する場合は +r オプションを使⽤する。たとえば仕⼊れ数を累計仕⼊れ数に置き換えるのであれば、この場合であれば4フィールド⽬の加算値を4フィールド⽬に出⼒するようにすれば良い。
$ cat data
a店 1⽇⽬ 103 62
a店 2⽇⽬ 157 94
a店 3⽇⽬ 62 30
a店 4⽇⽬ 131 84
a店 5⽇⽬ 189 111
a店 6⽇⽬ 350 20
a店 7⽇⽬ 412 301$←店名 ⽇付 売れ数 仕⼊数$ kasan +r key=4 data
a店 1⽇⽬ 103 62
a店 2⽇⽬ 157 156
a店 3⽇⽬ 62 186
a店 4⽇⽬ 131 270
a店 5⽇⽬ 189 381
a店 6⽇⽬ 350 401
a店 7⽇⽬ 412 702$【例4】

⼩数点のあるデータを加算する場合、それまでの⾏にある最⼤⼩数桁数に合わせて出⼒するようになる。
$ cat data
A 1
A 1.2
A 1.23
B 2
B 2.34B 3$$ kasan ref=1 key=2 data
A 1 1
A 1.2 2.2
A 1.23 3.43
B 2 2
B 2.34 4.34
B 3 7.34$【例5】
key=<pos> で指定できるのは数値、範囲(/)、列挙(@)、 NF NF -<n> である。

$ kasan key=1 data
第2から第3フィールドの各フィールドを加算し、加算値をそれぞれのフィールドの直後に挿⼊するには次のよ
うにコマンドを実⾏する。
$ cat data
A 1 2
A 3 4
A 5 6
$
$ kasan key=2/3 data
A 1 1 2 2
A 3 4 4 6A 5 9 6 12$
第2フィールドと第4フィールドの各フィールドを加算し、加算値をそれぞれのフィールドの直後に挿⼊するには次のようにコマンドを実⾏する。
$ kasan key=2@4 data
次のように NF も指定できる。
$ kasan key=NF data
$ kasan key=NF-2 data72

【関連項⽬】

plus(1) 、 ratio(1) 、 sm2(1) 、 sm4(1) 、 sm5(1) 、 ysum(1)73keta(1)【名前】
keta : テキストファイルの桁そろえ
【書式】

Usage

: keta n1 n2 .. [<filename>]keta -v [<filename>]keta [--] [<filename>]
Version : Tue Sep 6 08:46:04 JST 2022
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータの各フィールドの桁数をそろえて出⼒する。全フィールドに対してフィールド毎の桁数を指定する。指定桁数にそのフィールドの最⼤⻑未満を指定すると最⼤⻑がとられる。桁数指定をすべて省略すると各フィールドの桁数を⾃動的に判断して出⼒できる。フィールドは右詰めで出⼒するが、桁数指定に - を付けると左詰めにする。桁数指定をすべて省略して代わりに -- を指定すると全フィールドを左詰めで出⼒する。 <filename> として - を指定すると標準⼊⼒を使⽤する。桁数指定がある
ときは <filename> は省略可能になる。桁数指定がないときは <filename> は省略不可。 -v または -- 指定があるときは桁数指定はできず <filename> は省略不可。 <filename> が省略されたときは標準⼊⼒を仮
定する。
【例1】

引数で指定したファイルの各フィールド毎に最⼤桁数を判断して桁数を⾃動出⼒する。
$ cat data
01 埼⽟県 01 さいたま市 91 59 20 76 54
01 埼⽟県 02 川越市 46 39 8 5 21
01 埼⽟県 03 熊⾕市 82 0 23 84 10
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 06 港区 58 71 20 10 6
04 神奈川県 13 横浜市 92 56 83 96 75$$ keta data
←右詰め01
埼⽟県 01 さいたま市 91 59 20 76 54
01
埼⽟県 02
川越市 46 39 8 5 2101
埼⽟県 03
熊⾕市 82 0 23 84 10
02
東京都 04新宿区 30 50 71 36 30
02
東京都 06
港区 58 71 20 10 6
04 神奈川県 13
横浜市 92 56 83 96 75$$ keta -- data
←左詰め
01 埼⽟県
01 さいたま市 91 59 20 76 54
01 埼⽟県
02 川越市46 39 8 5 21
01 埼⽟県03 熊⾕市82 0 23 84 10
02 東京都
04 新宿区
30 50 71 36 30
02 東京都
06 港区
58 71 20 10 6
04 神奈川県 13 横浜市
92 56 83 96 75$【例2】

各フィールド毎の桁数を指定して出⼒する。引数としてファイルの各フィールドの1番⽬から最終フィールドまでのそれぞれの桁数を順に指定する。
↓2フィールド⽬の桁数 keta n1 n2 n3 ・・・・n NF ↑ ↑ 1フィールド⽬の桁数 最終フィールド⽬の桁数
なお、桁数は半⾓での⽂字数で指定する。⼤⽂字の場合は半⾓2⽂字分の指定が必要である。 keta 4は半⾓
では4⽂字分、全⾓では2⽂字分になる。次のコマンドで例1と同じ出⼒が得られる。
$ keta 2 8 2 10 2 2 2 2 2 data
【例3】

通常は桁は右詰めで出⼒されるが、左詰めで出⼒する場合は桁数に - をつけて指定すれば良い。例えば第2フィールドと第4フィールドを左詰めにして出⼒するには次のようにコマンドを実⾏する。

74

$ keta 2 -8 2 -10 2 2 2 2 2 data
01 埼⽟県
01 さいたま市 91 59 20 76 54
01 埼⽟県
02 川越市46 39 8 5 21
01 埼⽟県03 熊⾕市82 0 23 84 10
02 東京都
04 新宿区
30 50 71 36 30
02 東京都
06 港区
58 71 20 10 6
04 神奈川県 13 横浜市
92 56 83 96 7$
【例4】

同じ桁数を連続したフィールドに指定する場合は<桁数x連続するフィールド数>と表記することができる。 keta 3x4は keta 3 3 3 3と同じ意味を持つ。フィールド数には NF (1⾏のフィールド数)を使⽤し NFxx と指定できる。次のコマンドで例3と同じ出⼒が得られる。

$ keta 2 -8 2 -10 2x5 data
$ keta 2 -8 2 -10 2xNF-4 data
【例5】-v オプションを使⽤するとファイルの各フィールドの最⼤桁数を表⽰させることができる。

$ keta -v data
2 8 2 10 2 2 2 2 2$次のコマンドで例1と同じ出⼒が得られる。
$ keta $(keta -v data) data
【関連項⽬】

comma(1)75

keycut(1)【名前】
keycut : キーでファイルを分割
【書式】

Usage
: keycut [options] <filename> <file>
Options : -d : キーの削除: -a : ファイル追記: -z : 圧縮
Version : Thu Jul 28 14:56:55 JST 2022
Edition : 1【説明】<file> を読み込み、分割先ファイル名 <filename> で指定したキーフィールドの値が同⼀の⾏でファイルを分割する。例えば、第2フィールドが同じ値を持つ⾏でファイルを分割したいときは、data.%2のように <filename> を指定する。この時、分割先ファイル名はdata.(第2フィールドの値)となる。
なお、 keycut を使⽤する場合にはキーフィールドの値は事前に整列されている必要がある(内部的にはキーフィールドが変化したところでファイルに出⼒している)。 <filename> におけるキーフィールドは%(フィー
ルド番号)と指定するが、%5.2 %5.1.3のようにサブストリング指定も可能である。
【例1】基本的な使⽤⽅法$ cat data
01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 埼⽟県 01 さいたま市 91 59 20 76 54
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
03 千葉県 10 千葉市 52 91 44 9 0
03 千葉県 12 柏市 95 60 35 93 76
04 神奈川県 13 横浜市 92 56 83 96 75
04 神奈川県 16 ⼩⽥原市 45 21 24 39 03$$ keycut data.%1 data
$ ls -l data.*-rw-r--r-- 1 usp usp 87 2009-02-19 11:14 data.01-rw-r--r-- 1 usp usp 82 2009-02-19 11:14 data.02-rw-r--r-- 1 usp usp 77 2009-02-19 11:14 data.03-rw-r--r-- 1 usp usp 91 2009-02-19 11:14 data.04$$ cat data.01
01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 埼⽟県 01 さいたま市 91 59 20 76 54$$ cat data.02
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51$$ cat data.03
03 千葉県 10 千葉市 52 91 44 9 0
03 千葉県 12 柏市 95 60 35 93 76$$ cat data.04
04 神奈川県 13 横浜市 92 56 83 96 75
04 神奈川県 16 ⼩⽥原市 45 21 24 39 03$【例2】サブストリング指定$ keycut data.%1.2.1 data
$ ls -l data.*-rw-r--r-- 1 usp usp 87 2009-02-19 11:15 data.1-rw-r--r-- 1 usp usp 82 2009-02-19 11:15 data.2-rw-r--r-- 1 usp usp 77 2009-02-19 11:15 data.3-rw-r--r-- 1 usp usp 91 2009-02-19 11:15 data.4$【例3】-aオプション使⽤例

76←4つのファイルに分割

-a オプションを指定すると分割先ファイルは追記されるようになる。分割先ファイルがないときは新たに作成される。このオプションを指定しない場合にはファイルは上書きとなる。
$ keycut data.%1 data
$ keycut -a data.%1 data
$ ls -l data.*-rw-r--r-- 1 usp usp 174 2009-02-19 11:16 data.01-rw-r--r-- 1 usp usp 164 2009-02-19 11:16 data.02-rw-r--r-- 1 usp usp 154 2009-02-19 11:16 data.03-rw-r--r-- 1 usp usp 182 2009-02-19 11:16 data.04$$ cat data.01
01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 埼⽟県 01 さいたま市 91 59 20 76 54
01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 埼⽟県 01 さいたま市 91 59 20 76 54$【例4】-dオプション使⽤例-d オプションを指定すると、キーフィールドを除いた⾏を分割先ファイルに作成するようになる。キーフィールド指定が%1.2.1等のサブストリング指定であっても、キーフィールド全体(この例だと第1フィールド全体)が取り除かれる。
$ keycut -d data.%1 data
$ ls -l data.*-rw-r--r-- 1 usp usp 81 2009-02-19 13:13 data.01-rw-r--r-- 1 usp usp 76 2009-02-19 13:13 data.02-rw-r--r-- 1 usp usp 71 2009-02-19 13:13 data.03-rw-r--r-- 1 usp usp 85 2009-02-19 13:13 data.04$$ cat data.01
埼⽟県 03 熊⾕市 82 0 23 84 10
埼⽟県 01 さいたま市 91 59 20 76 54$【例5】-zオプション使⽤例-z オプションを指定すると、出⼒ファイルがGzip圧縮形式になる。

$ keycut -z data.%1.gz data
$ ls -l data.*-rw-r--r-- 1 usp usp 98 2009-02-19 13:17 data.01.gz-rw-r--r-- 1 usp usp 94 2009-02-19 13:17 data.02.gz-rw-r--r-- 1 usp usp 82 2009-02-19 13:17 data.03.gz-rw-r--r-- 1 usp usp 100 2009-02-19 13:17 data.04.gz$$ gunzip < data.01.gz
01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 埼⽟県 01 さいたま市 91 59 20 76 54$【備考】-a オプションと-zオプションを併⽤したときは、すでに存在する圧縮ファイルに圧縮ファイルが追記される。⽣成されるファイルは gunzip(1) (https://linuxjm.osdn.jp/html/GNU_gzip/man1/zcat.1.html) コマンドで展開できるが、仕様的に正しい動作はどうかは未調査。
【関連項⽬】

sorter(1) 、 マスタファイル(5) 、 トランザクションファイル(5)77loopj(1)【名前】
loopj : 複数のテキストファイル全⾏を連結
【書式】

Usage
: loopj [-d<string>] num=<num> <file1> <file2> ..
Version : Sat Jun 20 21:57:20 JST 2020
Edition : 1【説明】

引数で指定した複数のテキストファイルを、第1フィールドから

num=<n>で指定したフィールドまでをキーにしてすべて連結する( loopj=loop of join)。各ファイルの中でキーフィールドが⼀致しない⾏についてはそれぞれ0でフィールドを補完する。
連結する各ファイルは0バイトより⼤きく、キーとなるフィールドは必ずユニークかつ昇順で整列されていることが条件となる。フィールド数がキーフィールド数に満たない場合エラーとなる。また、 <file> が0バイト
ファイルの場合にもエラーとなる。
【例1】基本的な使い⽅$ cat file1
0000003 杉⼭______ A
0000005 崎村______ B
0000007 梶川______ C
0000010 柳本______ D$$ cat file2
0000000 50
0000003 26
0000004 40
0000009 68$$ cat file3
0000000 F
0000003 F
0000004 M
0000005 F$
3つのファイルを連結するには次のようにコマンドを実⾏する。
$ loopj num=1 file1 file2 file3
0000000 0 0 50 F
0000003 杉⼭______ A 26 F
0000004 0 0 40 M
0000005 崎村______ B 0 F
0000007 梶川______ C 0 00000009 0 0 68 00000010 柳本______ D 0 0$
ファイル名を - にすることで、標準⼊⼒ファイルを連結することができる。
$ cat file2 | loopj num=1 file1 - file3【例2】-d オプション-d オプションを使⽤することで補完する⽂字列を指定することができる。

$ loopj -d@@@ num=1 file1 file2 file3
0000000 @@@ @@@ 50 F
0000003 杉⼭______ A 26 F
0000004 @@@ @@@ 40 M
0000005 崎村______ B @@@ F0000007 梶川______ C @@@ @@@0000009 @@@ @@@ 68 @@@
0000010 柳本______ D @@@ @@@$【例3】キーのみを持つファイルの連結キーのみを持つファイルを連結した場合には値のみ補完が実施される。

78

$ cat file1
0001 10002 2$$ cat file2
0001
0002
0003
0004
$
$ loopj num=1 file1 file2
0001 10002 20003 00004 0$$ loopj num=1 file2 file2
0001
0002
0003
0004
$
【注意】

連結するファイルが0バイトの時はエラーになる。
$ : > data1$ cat data2
a 1
b 2
c 3
$
$ loopj num=1 data1 data2
Error[loopj] : 0バイトファイル[1]は連結できません。
$
上記の例でdata1が、例えば3フィールドあることを保証するには、次のようにコマンドを実⾏すれば良い。
$ [ ! -s data1 ] && echo x 0 0 > data1$ loopj num=1 data1 data2 | awk '$1!~/x/
a 0 0 1b 0 0 2c 0 0 3$
【関連項⽬】

join0(1) 、 join1(1) 、 join2(1) 、 loopx(1) 、 up3(1) 、 マスタファイル(5) 、 トランザクション
ファイル(5)79

loopx(1)【名前】
loopx : 総掛けで連結
【書式】

Usage
: loopx <file1> <file2> ...
Version : Sat Jun 20 21:57:20 JST 2020
Edition : 1【説明】

複数のファイルの各⾏に対して、総てのパターンの掛けあわせを作り連結して出⼒する。出⼒は指定ファイル
順に⾏が総掛けされる。 <file1> の各⾏に対し <file2> の⾏が総掛けされ、その結果の各⾏に対し <file3> の⾏が総掛けされるという順番に出⼒される。
【例1】

ファイルdata1、data2、data3を総掛けすると、例えば次のようになる。
$ cat data1
1 農業
2 ⼯業
$
$ cat data2
A 東京
B ⼤阪
$
$ cat data3
晴⾬$$ loopx data1 data2 data3
1 農業 A 東京 晴
1 農業 A 東京 ⾬
1 農業 B ⼤阪 晴
1 農業 B ⼤阪 ⾬
2 ⼯業 A 東京 晴2 ⼯業 A 東京 ⾬2 ⼯業 B ⼤阪 晴
2 ⼯業 B ⼤阪 ⾬$
【関連項⽬】

join0(1) 、 join1(1) 、 join2(1) 、 loopj(1) 、 up3(1) 、 マスタファイル(5) 、 トランザクション
ファイル(5)80

maezero(1)【名前】
maezero : 前にゼロをつける
【書式】

Usage
: maezero <f1.w1> <f2.w2> .. <file>
Option : --ngthrough <str>Version : Sat Jun 20 21:57:21 JST 2020
Edition : 1【説明】

引数のファイルまたは標準⼊⼒ファイルの指定フィールドを指定した桁数にて前ゼロパディングを⾏う。
【例1】$ at data
12 345 6789
$ maezero 1.5 2.6 data
00012 000345 6789$
【例2】

指定フィールドの内容が --ngthrough オプションで指定した⽂字列の場合は前ゼロパディングを⾏わない。
$ maezero --ngthrough 345 1.5 2.6 data
00012 345 6789$
【例3】連続したフィールドを指定することができる。
$ maezero 1.6/3.6 data
000012 000345 006789$【例4】

フィールド指定に NF や NF -<n> を使うことがでる。
$ maezero NF-1.6 data
12 000345 6789$
【備考】

maezero(1) コマンドはフィールドの内容に関しては何もチェックしていない。またフィールドの⻑さがすでに指定桁数を越えている時はそのフィールドに関しては処理を⾏わない。なお、指定フィールドは昇順になっている必要がある。
【関連項⽬】

フィールド形式(5)81man2(1)【名前】
man2 : USP コマンドのマニュアル表⽰
【書式】

Usage
: man2 <command>
Version : Mon Aug 8 12:15:22 JST 2022
【説明】

USP コマンドのマニュアルを表⽰します。
【例】$ man2 join0<-- join0 のマニュアルを表⽰します。

82

map(1)【名前】
map : 縦型ファイルを縦キー/横キー形式の表に変換
【書式】

Usage

: map
[-<l>] num=<n>x<m> <file>: map +yarr [-<l>] num=<n>x<m> <file>: map +arr [-<l>] num=<n>x<m> <file>
Option : -m<c> -n
Version : Sat Sep 19 23:49:25 JST 2020
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータが縦キーフィールド <n> 個、横キーフィールド <m> 個(未指定時 m=1 )、残りがデータフィールドであると仮定し、データを表に並べて出⼒する。表に展開することでデータの⽋落が発⽣する場合は0で補完する。補完する⽂字は -m オプションで変更できる。
【例1】

縦型データを map(1) するには次のようにコマンドを実⾏する。 num=<n> の値は縦キーのフィールド数を表す。この例ではnumの値は縦キーの最後のフィールドを指し⽰す2を指定する必要がある。
$ cat data
001 a店 01/01 103
001 a店 01/02 157
002 b店 01/01 210
002 b店 01/02 237$←縦キー 縦キー 横キー データ部

$ map num=2 data | keta*
* 01/01 01/02
001 a店103
157
002 b店
210
237
$
【例2】

データに⽋落がある場合、データが存在しない場所に値0が補完される。
$ cat data
001 a店 01/01 103
002 b店 01/02 237$$ map num=2 data | keta*
* 01/01 01/02
001 a店103
0002 b店
0
237
$
【例3】

データ部が複数列ある場合には複数⾏にマッピングが実施される。この時、各⾏にはA BC ...と順にインデックスが追加される。
$ cat data
a店 1⽇⽬ 103 62
a店 2⽇⽬ 157 94
a店 3⽇⽬ 62 30
a店 4⽇⽬ 131 84
・・
d店 6⽇⽬ 98 69
d店 7⽇⽬ 101 90$←縦キー 横キー 売数 客数83

$ map num=1 data | keta
* * 1⽇⽬ 2⽇⽬ 3⽇⽬ 4⽇⽬ 5⽇⽬ 6⽇⽬ 7⽇⽬
a店 A
103
157
62
131
189
350
a店 B
62
94
30
84
111
20
b店 A
210
237
150
198
259
421
b店 B
113
121
82
105
189
287
c店 A
81
76
38
81
98
109
c店 B
52
49
21
48
61
91
d店 A
75
72
34
74
91
98
d店 B
48
42
19
43
51
69
$

412
301
589
493
136
110
101
90

【例4】

例2の結果をさらにsed(1)コマンドでAを売数、Bを客数に置換すると次のような表になる。
$ map num=1 data | sed -e 's/A/売数/1' -e 's/B/客数/1' | keta*
* 1⽇⽬ 2⽇⽬ 3⽇⽬ 4⽇⽬ 5⽇⽬ 6⽇⽬ 7⽇⽬
a店 売数
103
157
62
131
189
350
412
a店 客数
62
94
30
84
111
20
301
b店 売数
210
237
150
198
259
421
589
b店 客数
113
121
82
105
189
287
493
c店 売数
81
76
38
81
98
109
136
c店 客数
52
49
21
48
61
91
110
d店 売数
75
72
34
74
91
98
101
d店 客数
48
42
19
43
51
69
90
$
【例5】
+yarr オプションを指定することでデータ部の複数列を横に展開することができる。

$ map +yarr num=1 data | keta
* 1⽇⽬ 1⽇⽬ 2⽇⽬ 2⽇⽬ 3⽇⽬ 3⽇⽬
*
a
b
a
b
a
a店
103
62
157
94
62
b店
210
113
237
121
150
c店
81
52
76
49
38
d店
75
48
72
42
34
$

-- 7⽇⽬ 7⽇⽬
b -a
30 -41282 -589
21 -136
19 -101b←⾃動的に追加される
301
493
110
90

$ map +yarr num=1 data | sed -e '2s/a/売数/g' -e '2s/b/客数/g' | keta
* 1⽇⽬ 1⽇⽬ 2⽇⽬ 2⽇⽬ 3⽇⽬ 3⽇⽬ -- 7⽇⽬ 7⽇⽬* 売数 客数 売数 客数 売数 客数 -- 売数 客数
a店
103
62
157
94
62
30 -412
301
b店
210
113
237
121
150
82 -589
493
c店
81
52
76
49
38
21 -136
110
d店
75
48
72
42
34
19 -10190$
横インデックスが不要な場合には +a r r オプションを使⽤する。
$ map +arr num=1 data | keta
* 1⽇⽬ 1⽇⽬ 2⽇⽬ 2⽇⽬ 3⽇⽬ 3⽇⽬
a店
103
62
157
94
62
b店
210
113
237
121
150
c店
81
52
76
49
38
d店
75
48
72
42
34
$

-- 7⽇⽬ 7⽇⽬
30 -41282 -589
21 -136
19 -101

301
493
110
90

【例6】
-m オプションで補完⽂字を指定できる。デフォルトは0。

$ cat data
A a 1
A b 2
B a 4
$
$ map -m@ num=1 data
* a b
A 1 2
B 4 @
$
【例7】
-<数値> オプションを妻うことで <数値> フィールド分ずつ map(1) を実施することができる。 <数値> はデータ部のフィールド数の約数である必要がある。

84

$ cat dataX x 1 2 3 4 5 6
X y 1 2 3 4 5 6
Y x 1 2 3 4 5 6
Y y 1 2 3 4 5 6$←データ部を1 2 3と4 5 6というように3つずmapしたい$ map -3 num=1 data
* * x x y y* * a b a b
X A 1 4 1 4
X B 2 5 2 5
X C 3 6 3 6
Y A 1 4 1 4
Y B 2 5 2 5
Y C 3 6 3 6$$ map +yarr -3 num=1 data
* * x x x y y y* * a b c a b c
X A 1 2 3 1 2 3
X B 4 5 6 4 5 6
Y A 1 2 3 1 2 3
Y B 4 5 6 4 5 6$←3フィールド分ずmap(1)する←+yarrの場合、3フィールド分ずつ折り返し【例8】
num=<n> x<m> で縦キー <n> 個、横キー <m> 個にすることができる。横キーはヘッダー <m> ⾏に展開される。
$ cat data
X1 Y1 Z1 1 8
X1 Y1 Z2 2 7
X1 Y2 Z1 3 6
X1 Y2 Z2 4 5
X2 Y1 Z1 5 4X2 Y1 Z2 6 3
X2 Y2 Z1 7 2
X2 Y2 Z2 8 1$$ map num=1x2 data
* * Y1 Y1 Y2 Y2* * Z1 Z2 Z1 Z2
X1 A 1 2 3 4X1 B 8 7 6 5
X2 A 5 6 7 8
X2 B 4 3 2 1$$ map +yarr num=1x2 data
* Y1 Y1 Y1 Y1 Y2 Y2 Y2 Y2* Z1 Z1 Z2 Z2 Z1 Z1 Z2 Z2* a b a b a b a b
X1 1 8 2 7 3 6 4 5
X2 5 4 6 3 7 2 8 1$←横ヘッダーが2⾏になる←横ヘッダーが2⾏になる【例9】-<数字>オプションと num=<n> x<m> を組み合わせると次のように動作する。
$ cat data3
X1 Y1 Z1 1 8 4 5 6 7
X1 Y1 Z2 2 7 4 5 6 7
X1 Y2 Z1 3 6 4 5 6 7
X1 Y2 Z2 4 5 4 5 6 7
X2 Y1 Z1 5 4 4 5 6 7
X2 Y1 Z2 6 3 4 5 6 7
X2 Y2 Z1 7 2 4 5 6 7
X2 Y2 Z2 8 1 4 5 6 7$85

$ map -3 num=1x2 data3* * Y1 Y1 Y1 Y1 Y2 Y2 Y2 Y2* * Z1 Z1 Z2 Z2 Z1 Z1 Z2 Z2* * a b a b a b a b
X1 A 1 5 2 5 3 5 4 5
X1 B 8 6 7 6 6 6 5 6
X1 C 4 7 4 7 4 7 4 7
X2 A 5 5 6 5 7 5 8 5
X2 B 4 6 3 6 2 6 1 6
X2 C 4 7 4 7 4 7 4 7$$ map +yarr -3 num=1x2 data3* * Y1 Y1 Y1 Y1 Y1 Y1 Y2 Y2 Y2 Y2 Y2 Y2* * Z1 Z1 Z1 Z2 Z2 Z2 Z1 Z1 Z1 Z2 Z2 Z2* * a b c a b c a b c a b c
X1 A 1 8 4 2 7 4 3 6 4 4 5 4X1 B 5 6 7 5 6 7 5 6 7 5 6 7
X2 A 5 4 4 6 3 4 7 2 4 8 1 4
X2 B 5 6 7 5 6 7 5 6 7 5 6 7$【例10】-n オプションを指定すると、付加するインデックスが数値になる。 -n を付けない場合にはアルファベッ

トwが使われるのでインデックス数が26個までという制限があるが、 -n を指定した場合にはインデックスが26個に制限されず、データ部が多い場合もマップすることができる。
$ cat data4
X1 Y1 A1 A2 A3 A4 -- A99 A100
X1 Y2 B1 B2 B3 B4 -- B99 B100
X1 Y3 C1 C2 C3 C4 -- C99 C100$
$ map -n num=1 data4
* *
Y1
Y2
Y3
X1 1
A1
B1
C1
X1 2
A2
B2
C2
・
・
X1 29 A99 B99 C99
X1 30 A100 B100 C100$
【関連項⽬】

unmap(1) 、 tateyoko(1)86marume(1)【名前】
marume : 四捨五⼊、切り上げ、切り捨て
【書式】

Usage
: marume [+age| -sage] <f1.d1> <f2.d2> .. <file>
Version : Sun Apr 19 23:32:18 JST 2020
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータの指定のフィールドを、指定された桁数にて四捨五⼊、切り上げ、切り捨てを実⾏して出⼒する。デフォルトの動作は四捨五⼊。 +age で切り上げ、 -sage で切り下げを
明⽰的に指定できる。⼩数点下に0を指定(n.0)すると該当フィールドを整数で出⼒する。また、桁数を0+桁数にすると、整数部の桁数以下を四捨五⼊、切り上げ、切り捨てする。
【例1】$ cat data
01 0.3418 1.5283 9.0023 7.1234 1234
02 3.1242 7.1423 6.5861 2.7735 1235
03 6.8254 2.6144 4.3234 3.4231 -1234
04 7.0343 3.3312 7.8678 1.3295 -1235$
第2フィールドを整数へ四捨五⼊、第3フィールドを⼩数点下1桁で四捨五⼊、第4フィールドを⼩数点下2桁で四捨五⼊、第5フィールドを⼩数点下3桁で四捨五⼊、第6フィールドを1の位で四捨五⼊して出⼒すると次のようになる。
$ marume 2.0 3.1 4.2 5.3 6.01 data
01 0 1.5 9.00 7.123 1230
02 3 7.1 6.59 2.774 1240
03 7 2.6 4.32 3.423 -1230
04 7 3.3 7.87 1.330 -1240$【例2】

例1をすべて四捨五⼊から切る上げに変更すると次のようになる。
$ marume +age 2.0 3.1 4.2 5.3 6.01 data
01 1 1.6 9.01 7.124 1240
02 4 7.2 6.59 2.774 1240
03 7 2.7 4.33 3.424 -1240
04 8 3.4 7.87 1.330 -1240$【例3】

例1をすべて四捨五⼊から切り下げに変更すると次のようになる。
$ marume -sage 2.0 3.1 4.2 5.3 6.01 data
01 0 1.5 9.00 7.123 1230
02 3 7.1 6.58 2.773 1230
03 6 2.6 4.32 3.423 -1230
04 7 3.3 7.86 1.329 -1230$【注意】

負数は正数を四捨五⼊、切り上げ、切り捨てしたものにマイナス符号をつけた値となる。
【関連項⽬】

divsen(1)87mdate(1)【名前】
mdate : ⽇付、週、⽉の処理
【書式】

Usage

:

DIRECT-MODE
⽇付
mdate -y <yyyymmdd>
mdate -e <yyyywwdd>/±<dif>mdate -e <yyyymmdd1> <yyyymmdd2>
mdate <yyyywwdd>/±<dif>mdate <yyyymmdd1> <yyyymmdd2>
mdate <yyyymm>m/±<dif>mdate -e <yyyymm>m/±<dif>mdate <yyyymm1>m <yyyymm2>m
mdate -ly <yyyymm>m
mdate today: 曜⽇: dif ⽇先までの⽇付を連続出⼒: ⽇付の範囲を連続出⼒: dif ⽇先の⽇付: ⽇付の差: dif ⽉先の⽉: dif ⽉先までの⽉を連続出⼒
: ⽉の差
: 前年⽉
: 今⽇の年⽉⽇

FILTER-MODE
⽇付
mdate -f -y <f>mdate -f -e <f>/±<dif>mdate -f -e <f1> <f2>
mdate -f <f>/±<dif>mdate -f <f1> <f2>
mdate -f <f1> ±<f2>
mdate -f -e <f1> ±<f2>
mdate -f -ly <f>
⽉次
mdate -f -d <f>mmdate -f <f>m/±<dif>mdate -f -e <f>m ±<dif>mdate -f <f1>m <f2>mmdate -f -e <f1>m <f2>mmdate -f <f>m ±<dif>mdate -f -e <f>m ±<dif>mdate -f -ly <f>m: 曜⽇
: dif ⽇先までの⽇付に展開: ⽇付間の展開: dif ⽇先の⽇付: ⽇付の差: ⽇付の加算: ⽇付の加算または展開: 前年⽇: ⽇付を1ヶ⽉分出⼒: dif ⽉先の⽉: dif ⽉先の⽉まで展開: ⽉の差: ⽉の展開: ⽉の加算: ⽉の加算展開: 前年⽉

Version : Sun Sep 25 06:47:00 JST 2022
Edition : 1【例1】dif先の⽇付、⽉の情報を出⼒$ mdate 20090912/+5
20090917$$ mdate 200909m/+5201002$【例2】dif先までの連続した⽇付、⽉の情報を出⼒$ mdate -e 20090912/+5
20090912 20090913 20090914 20090915 20090916 20090917$$ mdate -e 200909m/+5200909 200910 200911 200912 201001 201002$【例3】⽇付、⽉の差を出⼒$ mdate 20090917 20090912
5$$ mdate 201002m 200909m
5$【例4】⽇付、⽉の範囲を連続出⼒$ mdate -e 20090912 20090917
20090912 20090913 20090914 20090915 20090916 20090917$

88$ mdate -e 200909m 201002m
200909 200910 200911 200912 201001 201002$【例5】フィルターモード : dif先の⽇付、⽉の情報を挿⼊$ cat date_data
A 20090901 B
A 20090902 B
A 20090903 B$$ mdate -f 2/+5 date_data
A 20090901 20090906 B
A 20090902 20090907 B
A 20090903 20090908 B$$ cat month_data
A 200909 B
A 200910 B
A 200911 B$$ mdate -f 2m/+5 month_data
A 200909 201002 B
A 200910 201003 B
A 200911 201004 B$【例6】フィルターモード : dif先までの連続した⽇付、週、⽉の情報を挿⼊$ cat date_data
A 20090901 B
A 20090902 B
A 20090903 B$$ mdate -f -e 2/+5 date_data
A 20090901 20090902 20090903 20090904 20090905 20090906 B
A 20090902 20090903 20090904 20090905 20090906 20090907 B
A 20090903 20090904 20090905 20090906 20090907 20090908 B$$ cat month_data
A 200909 B
A 200910 B
A 200911 B$$ mdate -f -e 2m/+5 month_data
A 200909 200910 200911 200912 201001 201002 B
A 200910 200911 200912 201001 201002 201003 B
A 200911 200912 201001 201002 201003 201004 B$【関連項⽬】

calclock(1) 、 dayslash(1) 、 yobi(1)89mime-read(1)【名前】
mime-read : MIME形式のファイル読み込み
【書式】

Usage

: mime-read <name> <MIME-file>: mime-read -v <MIME-file>
Version : Sun Apr 19 23:32:18 JST 2020
Edition : 1【説明】

MIME形式のファイル<MIME -file >ファイルの各セクションの中から、 name="<name>" または filename="<name>" の記述があるパートを⾒つけだし、その部分のデータを出⼒する。 -v を指定した場
合はすべての name="..." または filename="..." を対象として名前の⼀覧を出⼒する。
【例】
mime-file の中からabc.xlsで指定される名前のセクションを取り出す。

$ mime-read abc.xls mime-file > abc.xls【関連項⽬】

cgi-name(1) 、 nameread(1)90mojihame(1)【名前】
mojihame : テンプレートに⽂字をはめ込み
【書式】

Usage

: mojihame <template> <data>: mojihame -l <label> <template> <data>: mojihame -h <label> <template> <data>
Version : Tue Oct 20 15:17:47 JST 2020
Edition : 1

(通常)
(⾏単位)
(階層データ)【説明】

引数に指定するtemplateファイルに、dataあるいは環境変数からデータを読んで値をはめ込む。次の3つの使い⽅がある。
1. dataのすべてのフィールドを順番にはめ込む(通常)2. dataの⾏単位のフィールドをtemplateの指定ラベル間繰り返しはめ込む(⾏単位)3. dataが階層データの場合、templateの指定ラベル間、階層的にはめ込む(階層データ)【例1】通常templateの中にある%1 %2 %3 ...の部分に、dataのフィールド(左上から右下に順番に%1%2 %3 ...に対応)を読んで置換する。
$ cat data
a b
c d
$
$ cat template
1st=%1
2nd=%2
3rd=%3 4th=%4$$ mojihame template data
1st=a
2nd=b
3rd=c 4th=d$【例2】通常その2

デフォルトでは@というデータはヌル⽂字列として置換される。このデフォルトを変更するには -d オプ
ションを使⽤する。 -d オプションを単独で使⽤した場合には、ヌル⽂字列に置換する機能は無効になる。
$ cat data
a @
@ d
$
$ cat template
1st=%1
2nd=%2
3rd=%3 4th=%4$$ mojihame template data
1st=a
2nd=
3rd= 4th=d$$ mojihame -da template data
1st=
2nd=@
3rd=@ 4th=d$【例3】⾏単位

dataは1⾏単位に読み込まれ、⾏の各フィールドが%1 %2 ...に対応する。次の⾏が読み込まれるときは再び
templateが使⽤され、データがはめ込まれ出⼒される。この使い⽅は旧 mojihame の -r と互換性がある。 mojihame -r は将来廃⽌される。

91

$ cat dataa b c dw x y z$$ cat template
1st=%1 2nd=%2
3rd=%3 4th=%4$$ mojihame -l template data
1st=a 2nd=b
3rd=c 4th=d
1st=w 2nd=x
3rd=y 4th=z$$ mojihame -r template data
1st=a 2nd=b
3rd=c 4th=d
1st=w 2nd=x
3rd=y 4th=z$【例4】⾏単位その2-l オプションで引数(ラベル)を指定した場合、templateのラベルで囲まれた⾏のみにデータが繰り返しはめ込まれる。このときラベルを含む⾏は出⼒されない。また、ラベルにはさまれていない前後の部分は何も変換されず、そのまま出⼒される。ラベルはtemplate内部に2回だけ記述可能で、それぞれはめ込み対象の開始⾏と終了
⾏とみなされる。指定ラベルは部分⼀致でラベル⾏と判断するので注意が必要。
$ cat data
a b
y z
$
$ cat template
header %1
LABEL
1st=%1 2nd=%2
LABEL
footer %2$$ mojihame -lLABEL template data
header %1
1st=a 2nd=b
1st=y 2nd=z
footer %2$【例5】⾏単位その3-l オプションを繰り返し使⽤することにより、プルダウンなどのHTMLを簡易に⽣成することができる。指定ラベルはtemplateに1組しか認められていないので、次の例のように内側のラベルから順番に値をはめていくという⼿順でコマンドを実⾏する。
$ cat member佐藤鈴⽊$$ cat kbn1
東京
⼤阪
横浜
$
$ cat kbn2
男
⼥
$

92

$ cat template
MEMBER
⽒名＝%1
K1
地名＝%1
K1
K2
性別＝%1
K2
MEMBER$$ mojihame -lK1 template kbn1 |member
⽒名＝佐藤
地名＝東京
地名＝⼤阪
地名＝横浜
性別＝男
性別＝⼥
⽒名＝鈴⽊
地名＝東京
地名＝⼤阪
地名＝横浜
性別＝男
性別＝⼥
$

mojihame -lK2 - kbn2 | mojihame -lMEMBER -【例6】⾏単位その4

デフォルトでは@というデータはヌル⽂字列として置換される。このデフォルトを変更するには -d オプ
ションを使⽤する。 -d オプションは -l オプションの後に指定する必要がある。
$ mojihame -lLABEL -dx template data【例7】階層データ-h オプションは階層的にデータのはめ込みを実施する。templateにおいて階層的ラベルに囲まれた部分に現れる%数字がdataの階層的キーフィールドに対応する。
$ cat data
⼭⽥ 東京 10:00
⼭⽥ ⼤阪 20:00
⼭⽥ 横浜 09:30
鈴⽊ 東京 16:45
鈴⽊ 神⼾ 15:30$
次のtemplateの場合、LABEL-1に囲まれているのは%1、LABEL-1に囲まれている部分にさらにLABEL-2があり、LABEL-2で囲まれている部分に%2と%3がある。このとき、第1フィールドが変化する回数だけ、LABEL-1
で囲まれている部分が繰り返し値がはめられ、LABEL-2で囲まれている部分は、同じ第1フィールドの値を持つ
第2、第3フィールドの⾏の数だけ繰り返し値がはめられる。
$ mojihame -hLABEL template dat
表題 %1
⽒名＝⼭⽥
地名＝東京 時刻＝10:00
地名＝⼤阪 時刻＝20:00
地名＝横浜 時刻＝09:30
⽒名＝鈴⽊
地名＝東京 時刻＝16:45
地名＝神⼾ 時刻＝15:30$$ cat template
表題 %1
LABEL-1
⽒名＝%1
LABEL-2
地名＝%2 時刻＝%3
LABEL-2
LABEL-1$
階層の深さに制約はない。ラベルは部分⼀致でラベル⾏と判定される。コマンドライン上は -h LABELとし、templateでは階層にあわせてLABEL-1、LABEL-2とするのが有効。このような階層ラベルはtemplateの中でそれぞれ1組ずつのみ認められている。

93【注意1】

デフォルトでは@はヌル⽂字列として置換される。⽂字を変更するには -d オプションを使う。 -d オプ
ションは -h や -l オプションの後に指定しなくてはならない。
$ mojihame -dx template data
$ mojihame -lLABEL -dx template data
$ mojihame -hLABEL -dx template data
【注意2】アンダースコアデータの扱い

データの中の \_ は mojihame 実⾏後には_に置換される。エスケープのない_は半⾓スペースに置換される。
$ cat template<input type="text" value="%1" /><input type="text" value="%2" /><input type="text" value="%3" />$$ cat data
usp_lab
usp\_lab______\_\_$$ mojihame template data
<input type="text" value="usp lab" /><input type="text" value="usp_lab" /><input type="text" value="__" />$【備考】

1. ファイル名に - を指定したときは標準⼊⼒からのデータを期待する。templateもdataのいずれかを指定できる。
2. -d オプションは⽂字列を指定しない場合には data の値をそのまますべて template にはめ込む。
【関連項⽬】

filehame(1) 、 formhame(1)94msort(1)【名前】
msort : オンメモリソート
【書式】

Usage
: msort key=<key> [<file>]
Version : Sun Aug 28 11:47:10 JST 2022
Edition : 1【説明】
key=<key> にしたがって <file> のソートを⾏います。 <key> として、フィールドの位置を指定できます。
msort key=2 filemsort key=2/5 filemsort key=3@1@NF file
キーの⻑さやキーフィールド数の制限はありません。⽇本語などのマルチバイト⽂字が含まれていても構いません。フィールド位置の後に r を付けると、そのフィールドは降順にソートされます。n を付けると数値として⽐較されます。nr を付けると、数値として⽐較されて降順にソートされます。/ の前後のフィールドにソート種別を付ける場合は、前後で揃っている必要があります。
msort key=2n/5n filemsort key=2n/5nr filemsort key=2n/5r file○××

ファイル名を指定しない、或は - を指定した場合、標準⼊⼒から読み込みます。

95

nameread(1)【名前】
nameread : ネーム形式(5)のファイル読み込み
【書式】

Usage
Option: nameread [-el] <name> <namefile>: -d<c>
空⽩を置換: -i<string> ヌルデータの初期化
Version : Mon Sep 20 09:31:28 JST 2021
Edition : 1【説明】

ネームファイル(5) からnameを指定して値を読みる。 <namefile> が - あるいは指定がないときは標準⼊⼒よりデータを受け取る。
-l オプションでnameも合わせて出⼒する。 -e オプションで正規表現を指定でき、 -d オプションで空⽩

データを置換する⽂字を指定する(指定がない場合は空⽩データを削除する)。 -i オプションでヌルデータの初期化を実施する。
【例】$ cat namefile
A usp
B usp laboratory
C
$
通常の出⼒
$ nameread A namefile
usp$
ネーム形式(5) のデータは空⽩を含む$ nameread B namefile
usp laboratory$
空⽩を変換したいときは -d オプションを使⽤$ nameread -d_ B namefile
usp_laboratory$
空⽩を削除したいときは -d オプションを引数なしで指定$ nameread -d B namefile
usplaboratory$
名前のみ存在している場合には空⾏を出⼒$ nameread C namefile$
ヌルデータを初期化する場合は -i オプションを使⽤$ namread -i@@@ C namefile@@@$
名前が存在しない場合には何も出⼒しない$ nameread D namefile$
名前も⼀緒に出⼒するには -l オプションを使⽤$ nameread -l A namefile
A usp
$

96

-e オプションを指定することで正規表現を利⽤可能$ cat namefile2
A01 1
A02 2
A03 3
A10 5
$
$ nameread -e '^A0[0-9]$' namefile2
1
2
3$$ nameread -el '^A0[0-9]$' namefile2
A01 1
A02 2
A03 3
$
【関連項⽬】

cgi-name(1) 、 mime-read(1) 、 ネーム形式(5)97numchar(1)【名前】
numchar : 標準⼊⼒から⽂字列を読んで数値⽂字参照に変換する。
【書式】

Usage
: numchar
Version : Tue Feb 19 23:38:53 JST 2019
Edition : 1【説明】

標準⼊⼒から⼊⼒された⽂字列を数値⽂字参照に変換します。
【例1】$ echo 我々は宇宙⼈だ。 | numchar&#x6211;&#x3005;&#x306f;&#x5b87;&#x5b99;&#x4eba;&#x3060;&#x3002;【コメント】

このコマンドは、「シェルスクリプト⾼速開発⼿法」のために作られたものです。

98

plus(1)【名前】
plus : 引数の⾜し算
【書式】

Usage
: plus v1 v2 ...
Version : Sat Jun 20 21:57:21 JST 2020
Edition : 1【説明】

v1 + v2 + v3 ...の値を出⼒する。
【例】$ plus 1 2 3 410$$ plus 1.21 2.345 -2.524
1.031
$
【例】

パイプ処理の直後、パイプ各⾏のコマンドの結果ステータスを⾜し算して、0ならばすべて正常終了、異なればエラー終了である、といった判定処理に利⽤される。この使い⽅は${PIPESTATUS[@]}が提供されているbashなどに限定される。
$ comman1 |command2 | command3 | ... > result$ [ $plus ${PIPESTATUS[@]}) -ne 0 ] && exit
【関連項⽬】

kasan(1) 、 ratio(1) 、 sm2(1) 、 sm4(1) 、 sm5(1) 、 ysum(1)99rank(1)【名前】
rank : ⾏に階数を追加
【書式】

Usage
: rank ref=<ref> key=<key> <file>
Version : Fri Jul 15 16:18:04 JST 2022
Edition : 1【説明】fileの各⾏に階数を追加する。 ref=<ref> で参照キーフィールドを指定した場合、参照キーフィールドが変化した段階で階数を1に初期化する。 key=<key> で値フィールドを指定した場合、値が同じ間は同じ階数を追加する。 <file> として - を指定すると標準⼊⼒を使⽤する。 ref= 指定または key= 指定があるときは <file> を省略して標準⼊⼒を使⽤する。
【例1】基本パターン

引数を何も指定しないときは、単純に⾏番号を追加する。
$ cat data
JPN 杉⼭______ 26
JPN 崎村______ 27
JPN 梶川______ 27
JPN 柳本______ 30
USA BOB_______ 25
USA GEROGE____ 29
USA SAM_______ 29
USA TOM_______ 35$$ rank data
1 JPN 杉⼭______ 26
2 JPN 崎村______ 27
3 JPN 梶川______ 27
4 JPN 柳本______ 30
5 USA BOB_______ 25
6 USA GEROGE____ 29
7 USA SAM_______ 29
8 USA TOM_______ 35$【例2】ref=指定
ref=<ref> で参照フィールドを指定したときは、参照フィールドが変化した⾏で、階数を1に初期化する。 ref=1/2 ref=3@2/5 などの連続・不連続のフィールドを指定することも可能。
$ rank ref=1 data
1 JPN 杉⼭______ 26
2 JPN 崎村______ 27
3 JPN 梶川______ 27
4 JPN 柳本______ 30
1 USA BOB_______ 25
2 USA GEROGE____ 29
3 USA SAM_______ 29
4 USA TOM_______ 35$【例3】key指定
key=<key> で値フィールドを1つだけ指定できる。この場合、値が同じフィールドを持つ⾏には同じ階数が追加される。次の⾏には、はじめから数えた階数が追加される。
$ rank key=3 data
1 JPN 杉⼭______ 26
2 JPN 崎村______ 27
2 JPN 梶川______ 27
4 JPN 柳本______ 30
5 USA BOB_______ 25
6 USA GEROGE____ 29
6 USA SAM_______ 29
8 USA TOM_______ 35$【例4】refとkey指定

100参照キーが変化するところで、⾏番号が初期化され、かつ同じ値フィールドを持つ⾏には同じ階数が追加される。
$ rank ref=1 key=3 data
1 JPN 杉⼭______ 26
2 JPN 崎村______ 27
2 JPN 梶川______ 27
4 JPN 柳本______ 30
1 USA BOB_______ 25
2 USA GEROGE____ 29
2 USA SAM_______ 29
4 USA TOM_______ 35$【注意】

⼊⼒ファイルが - あるいは指定がない場合には、標準⼊⼒のデータが使⽤される。
同じ階数を追加するかどうかは、値が⽂字列として同じかどうかで判断しており、数字としては判定していない。
【関連項⽬】

count(1) 、 gyo(1) 、 juni(1) 、 retu(1)101ratio(1)【名前】
ratio : 構成⽐算出
【書式】

Usage
Option: ratio key=<key> <file>: ref=<ref>←参照キーの指定: -
←⼩数点以下の精度: +<n>h←先頭<n>⾏をヘッダーとみなす
Version : Tue Oct 20 15:17:47 JST 2020
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータに対し、 key= で指定したフィールドに対して全⾏の合計に対する各フィールドの値の構成⽐を算出し、次のフィールドに挿⼊して出⼒する。
【例1】$ cat data
a店 1⽇⽬ 103 62
b店 1⽇⽬ 210 113
c店 1⽇⽬ 81
52
d店 1⽇⽬ 75
48
e店 1⽇⽬ 211 140$←店名 ⽇付 売数 客数

売数(第3フィールド)の店別構成⽐を求めて売数の次のフィールドに挿⼊するには、次のようにコマンドを実⾏する。
$ ratio key=3 data | keta
a店 1⽇⽬ 103 15.1 62
b店 1⽇⽬ 210 30.9 113
c店 1⽇⽬ 81 11.9 52
d店 1⽇⽬ 75 11.0 48
e店 1⽇⽬ 211 31.0 140$←第4フィールドが構成⽐になっている【例2】refオプション
ref= で指定したフィールドをキーフィールドとし、キーフィールドの値が同じ⾏の中で構成⽐を計算して出⼒する。なお、キーフィールドはあらかじめ整列されていることが条件となる。
$ cat data
a店 1⽇⽬ 103 62
a店 2⽇⽬ 157 94
a店 3⽇⽬ 62 30
b店 1⽇⽬ 210 113
b店 2⽇⽬ 237 121
b店 3⽇⽬ 150 82
c店 1⽇⽬ 81 52
c店 2⽇⽬ 76 49
c店 3⽇⽬ 38 21
d店 1⽇⽬ 75 48
d店 2⽇⽬ 72 42
d店 3⽇⽬ 34 19
e店 1⽇⽬ 211 140
e店 2⽇⽬ 149 91
e店 3⽇⽬ 120 73$←店名 ⽇付 売数 客数

各⽇(第2フィールド)毎に店別の売数(第3フィールド)の構成⽐を求める。

102

$ sort -k2,2 -k1,1 data | ratio ref=2 key=3 | keta
a店 1⽇⽬ 103 15.1 62←第4フィールドが1⽇⽬における構成⽐
b店 1⽇⽬ 210 30.9 113
c店 1⽇⽬ 81 11.9 52
d店 1⽇⽬ 75 11.0 48
e店 1⽇⽬ 211 31.0 140
a店 2⽇⽬ 157 22.7 94←第4フィールドが2⽇⽬における構成⽐
b店 2⽇⽬ 237 34.3 121
c店 2⽇⽬ 76 11.0 49
d店 2⽇⽬ 72 10.4 42
e店 2⽇⽬ 149 21.6 91
a店 3⽇⽬ 62 15.3 30←第4フィールドが3⽇⽬における構成⽐
b店 3⽇⽬ 150 37.1 82
c店 3⽇⽬ 38 9.4 21
d店 3⽇⽬ 34 8.4 19
e店 3⽇⽬ 120 29.7 73$【例3】+hオプション+<n>h オプションを付けると、先頭の <n> ⾏を⾶ばして構成⽐を計算する。先頭⾏に既に項⽬名などのヘッダーが付与されているデータを計算する場合などに使⽤する。新たに増える構成⽐のフィールドのヘッダーは@となる。
$ cat data
店
⽇付 売数 客数
a店 1⽇⽬ 103
62
b店 1⽇⽬ 210 113
c店 1⽇⽬81
52
d店 1⽇⽬75
48
e店 1⽇⽬ 211 140$←項⽬名のヘッダー

先頭⾏を⾶ばして売数(第3フィールド)の店別構成⽐を求めて売数の次のフィールドに挿⼊する。
$ ratio +h key=3 data |
店
⽇付 売数
@ 客数
a店 1⽇⽬ 103 15.1
62
b店 1⽇⽬ 210 30.9 113
c店 1⽇⽬
81 11.9
52
d店 1⽇⽬
75 11.048
e店 1⽇⽬ 211 31.0 140$

keta←先頭⾏はそのまま(計算しない)←第4フィールドが構成⽐になっている【例4】-
オプション-<数値>で構成⽐の⼩数点以下の精度を指定できる。
$ cat data
a店 1⽇⽬ 103 62
b店 1⽇⽬ 210 113
c店 1⽇⽬ 81
52
d店 1⽇⽬ 75
48
e店 1⽇⽬ 211 140$←店名 ⽇付 売数 客数

売数(第3フィールド)の店別構成⽐を⼩数点3桁まで求める。
$ ratio -3 key=3 data |a店 1⽇⽬ 103 15.147 62
b店 1⽇⽬ 210 30.882 113
c店 1⽇⽬ 81 11.912 52
d店 1⽇⽬ 75 11.029 48
e店 1⽇⽬ 211 31.029 140$

keta【関連項⽬】

kasan(1) 、 plus(1) 、 sm2(1) 、 sm4(1) 、 sm5(1) 、 ysum(1)103retu(1)【名前】
retu : 列をカウント
【書式】

Usage
: retu [-f] <file> ...
Version : Tue Sep 6 08:46:04 JST 2022
Edition : 1【説明】

引数のファイルまたは標準⼊⼒のテキストデータの列数(フィールド数)をカウントして出⼒する。
【例1】$ cat data
0000000 浜地______ 50 F 91 59 20 76 540000001 鈴⽥______ 50 F 46 39 8 5 210000003 杉⼭______ 26 F 30 50 71 36 300000004 ⽩⼟______ 40 M 58 71 20 10 60000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2 33 15 62$$ retu data
9
$
【例2】

複数のファイルの列数(フィールド数)を⼀度にカウントできる。同⼀ファイル内に違う列数の⾏があると、列数が変化した時点で列数を出⼒する。 -f オプションをつけるとファイル名も出⼒される。
$ cat data1
1 file1
2 file1
3 file1$$ cat data2
1 file22$$ cat data3
1
2 file3
3
4 file3$$ retu data1 data2 data3
2
2
1
1
2
1
2
$
【例3】
-f オプションを使⽤するとファイル名と列数をそれぞれ表⽰する。

$ retu -f data1 data2 data3
data1 2
data2 2
data2 1
data3 1
data3 2
data3 1
data3 2
$
【備考】

104

ファイル名に - を指定すると標準⼊⼒からのデータ読み込みを期待する。
$ cat data2 | retu -f data1 - data3【関連項⽬】

count(1) 、 gyo(1) 、 juni(1) 、 rank(1)105rjson(1)【名前】
rjson : JSON 形式のファイルをフィールド形式に変換する
【書式】

Usage
: rjson [-p<c>][-m<c>][-s<c>][-n<string>] [<json-file>]
Version : Mon Sep 12 12:13:51 JST 2022
Edition : 1【説明】

JSON 形式(RFC8259) のファイル <json-file> をフィールド形式にします。オブジェクト名とリスト位置がネストの順に出⼒され、最後に値が出⼒されます。
【オプション】-p : オブジェクト名やリスト位置の区切りを変更します。デフォルトは半⾓空⽩です。 -m : オブジェクト

名に含まれる半⾓空⽩を変更します。デフォルトは "_" です。 -s : 値に含まれる半⾓空⽩を変更します。デフォルトは "_" です。 -n : ヌル値(空⽂字列)を変更します。デフォルトは "_" です。
【例１】$ cat jsondata{"data1" : "null","data2" : "","data3" : null,"data4" : true,"data5" : false,"data6" : "6.62607e-34"}$ rjson jsondata
data1 null
data2 _
data3 _
data4 true
data5 false
data6 6.62607e-34【例２】$ cat jsondata[{ "name": "Alice Brown","sku": "54321","price" : 199.95,"shipTo" : { "name" : "Bob Brown","address" : "456 Oak Lane","city" : "Pretendville","state" : "","zip": "98999" },"billTo" : { "name" : "Alice Brown","address" : "456 Oak Lane","city" : "Pretendville","state" : "HI","zip": "98999" }},{ "name": "Donald Tramp","sku": "24680","price" : 153.32,"shipTo" : { "name" : "Kim Jonil","address" : "123 Hidroask","city" : "Pyonyan","state" : "NK","zip": "10012" },"billTo" : { "name" : "Donald Tramp","address" : "456 Oak Lane","city" : "Pretendville","state" : "HI","zip": "98999" }
}
]

106

$ rjson < jsondata
1 name Alice_Brown
1 sku 54321
1 price 199.95
1 shipTo name Bob_Brown
1 shipTo address 456_Oak_Lane
1 shipTo city Pretendville1 shipTo state _1 shipTo zip 98999
1 billTo name Alice_Brown
1 billTo address 456_Oak_Lane
1 billTo city Pretendville
1 billTo state HI
1 billTo zip 98999
2 name Donald_Tramp
2 sku 24680
2 price 153.32
2 shipTo name Kim_Jonil
2 shipTo address 123_Hidroask
2 shipTo city Pyonyan
2 shipTo state NK
2 shipTo zip 10012
2 billTo name Donald_Tramp
2 billTo address 456_Oak_Lane
2 billTo city Pretendville
2 billTo state HI
2 billTo zip 98999$ rjson -p. < jsondata
1.name Alice_Brown
1.sku 54321
1.price 199.95
1.shipTo.name Bob_Brown
1.shipTo.address 456_Oak_Lane
1.shipTo.city Pretendville1.shipTo.state _1.shipTo.zip 98999
1.billTo.name Alice_Brown
1.billTo.address 456_Oak_Lane
1.billTo.city Pretendville
1.billTo.state HI
1.billTo.zip 98999
2.name Donald_Tramp
2.sku 24680
2.price 153.32
2.shipTo.name Kim_Jonil2.shipTo.address 123_Hidroask
2.shipTo.city Pyonyan
2.shipTo.state NK
2.shipTo.zip 10012
2.billTo.name Donald_Tramp
2.billTo.address 456_Oak_Lane
2.billTo.city Pretendville
2.billTo.state HI
2.billTo.zip 98999【例３】$ cat jsondata2[["a","b"],["c","d"]]$ rjson jsondata2
1 1 a
1 2 b
2 1 c
2 2 d
【関連項⽬】

wjson(1)107self(1)【名前】
self : 指定したフィールドのデータ取り出し
【書式】

Usage

: self <f1> <f2> ... [<file>]: self -d <f1> <f2> ... <string>
Version : Oct 20 17:32:09 JST 2022
【説明】

fileから指定したフィールドのデータだけを取り出して出⼒する( self=select field)。 <file> として - を指定するかまたは省略すると標準⼊⼒を使⽤する。フィールド指定において0は全フィールドを意味する。コマ
ンド⼊⼒が「 self 」でパラメータがないときはコマンドの構⽂を表⽰して終了する。 -d オプションが指定された場合、引数の⽂字列に対して処理が適⽤される。
【例1】

テキストデータの第4フィールドと第2フィールドを取り出して出⼒する。
$ cat data
0000000 浜地______ 50 F 91 59 20 76 540000001 鈴⽥______ 50 F 46 39 8 5 210000003 杉⼭______ 26 F 30 50 71 36 300000004 ⽩⼟______ 40 M 58 71 20 10 60000005 崎村______ 50 F 82 79 16 21 80$$ self 4 2 data
F 浜地______
F 鈴⽥______
F 杉⼭______
M ⽩⼟______
F 崎村______$【例2】

self(1) はフィールド中の部分を切り出して出⼒することもできる。処理としてはawk(1)のsubstr関数と同じ処理となる。
たとえば第1フィールドの4⽂字⽬以降を出⼒するには次のようにコマンドを実⾏する。
$ self 1.4 2 data
0000 浜地______
0001 鈴⽥______
0003 杉⼭______
0004 ⽩⼟______
0005 崎村______$
第2フィールドの1⽂字⽬から半⾓4⽂字分(全⾓2⽂字分)出⼒する。
$ self 2.1.4 3 data
浜地 50
鈴⽥ 50
杉⼭ 26
⽩⼟ 40
崎村 50
$
【例3】

0で⾏全体を指定できる。
$ self 0 data
0000000 浜地______ 50 F 91 59 20 76 540000001 鈴⽥______ 50 F 46 39 8 5 210000003 杉⼭______ 26 F 30 50 71 36 300000004 ⽩⼟______ 40 M 58 71 20 10 60000005 崎村______ 50 F 82 79 16 21 80$

108

$ self 4 0 data
F 0000000 浜地______ 50 F 91 59 20 76 54
F 0000001 鈴⽥______ 50 F 46 39 8 5 21
F 0000003 杉⼭______ 26 F 30 50 71 36 30
M 0000004 ⽩⼟______ 40 M 58 71 20 10 6
F 0000005 崎村______ 50 F 82 79 16 21 80$【例4】連続したフィールドも記述できる。
$ self 2/5 data
浜地______ 50 F 91
鈴⽥______ 50 F 46
杉⼭______ 26 F 30
⽩⼟______ 40 M 58
崎村______ 50 F 82$
【例5】
NF (現在の⾏のフィールド数)を使⽤することができる。

$ self 1 NF-3 NF data
0000000 59 540000001 39 210000003 50 30
0000004 71 60000005 79 80$【例6】

複数の空⽩があるフィールドを1つの空⽩にすることができる。
$ cat data2
a
b
c
d e
$
$ self 1/NF data2
a b
c d e
$
【例7】

ダイレクトモードを使⽤して⽂字列を加⼯することができる。
$ self -d 1.1.4 "20070401 12345"
2007
$
【例8】
self の切り出し指定は画⾯表⽰⻑の半⾓⽂字分を1として扱う。

$ echo ｱｲｳｴｵｶｷｸｹｺ | self 1.3.4
ｳｴｵｶ
$
【注意】

⼊⼒ファイルが改⾏⽂字で終了していない場合、つまり⾏が尻切れになっている場合はファイル末尾に改⾏⽂字が追加されて完結した⾏になる。
-d 指定がないとき 数字名のファイルを使⽤してはならない。 もし10という名前のファイルが存在しても self 1 10は標準⼊⼒ファイルから第1および第10フィールドを抽出するという動作をする 数字名以外であっても最後のパラメータがフィールド指定形式に⾒合った⽂字列のとき それはファイル名ではなくフィールド指定とみなされて⼊⼒は標準⼊⼒から⾏なわれる
また、⽂字列切り出し指定において、切り取りや⻑さが⽂字の区切りに⼀致しないときにはエラーとなる。
フィールドの幅より⼤きい開始位置を指定してもエラーとなる。
【関連項⽬】

delf(1)109

110

selr(1)【名前】
selr : フィールドが完全⼀致した⾏を出⼒する
【書式】

Usage
: selr <field> <str> <file>
Option : --through <str>Version : Sun Nov 21 17:29:33 JST 2021
Edition : 1【説明】

引数のファイルのテキストデータより、指定したフィールドが指定した⽂字列と完全⼀致した⾏を出⼒します。ファイル名が省略された時及び "-" の時は標準⼊⼒から⼊⼒します。
【例１】 指定したフィールドが完全⼀致した⾏を出⼒する$ cat data
0001 a0002 b0003 c0004 c$ selr 1 "0001" data
0001 a$ selr 2 c data
0003 c0004 c【例２】--through を指定したときは、 <str> が同じものであれば、無条件に全レコードを出⼒し、異なるものであれば、 --through を指定しなかったように動作します。
$ selr --through _ 2 _ data
0001 a0002 b0003 c0004 c$ selr --through _ 2 a data
0001 a【関連項⽬】

delr(1)111

sm2(1)【名前】
sm2 : キー単位での値の集計
【書式】

Usage
: sm2 [+count] <k1> <k2> <s1> <s2> [<file>]
Version : Oct 20 17:32:09 JST 2022
【説明】<file> ファイルから、キーが同じ⾏の各フィールドの値を集計する。k1で指定したフィールドからk2で指定したフィールドまでをキーとして、s1で指定したフィールドからs2で指定したフィールドまでの各フィールドを集計する。同じキーをもつ⾏は1⾏に集計されて出⼒される。なお、キーまたは集計フィールドいずれの範囲にも指定していないフィールドについては出⼒はされない。
【例1】$ cat data
0001 新橋店 20060201 91 59 20 76 54
0001 新橋店 20060202 46 39 8 5 210001 新橋店 20060203 82 0 23 84 100002 池袋店 20060201 30 50 71 36 30
0002 池袋店 20060202 78 13 44 28 51
0002 池袋店 20060203 58 71 20 10 60003 新宿店 20060201 82 79 16 21 80
0003 新宿店 20060202 50 2 33 15 620003 新宿店 20060203 52 91 44 9 00004 上野店 20060201 60 89 33 18 60004 上野店 20060202 95 60 35 93 76
0004 上野店 20060203 92 56 83 96 75$←店別番号 店名 ⽇付 商品別売数

店別の売れ数の合計を出⼒させる。第1フィールドから第2フィールドをキーとして第4フィールドから第8フィールドを集計する。
$ sm2 1 2 4 8 data
0001 新橋店 219 98 51 165 85
0002 池袋店 166 134 135 74 870003 新宿店 184 172 93 45 1420004 上野店 247 205 151 207 157$【例2】+c oun t オプションはキー毎の集計すると同時に、元データの各キー毎の⾏の⾏数をキーの直後に挿⼊出⼒する。
$ cat data
1111 31111 51111 22222 32222 103333 43333 83333 93333 6$
キーが同⼀の⾏を出⼒する。
$ sm2 +count 1 1 2 2 data
1111 3 102222 2 133333 4 27$【例3】

sm2(1) は⼩数点がある場合、各キー、各フィールド毎に⼀番精度の⾼い数に合わせて出⼒する。

112

$ cat data3
a 1.4 2.55
a 2
4
b 1.33 2.1
b 5.222 3.12$
$ sm2 1 1 2 3 data3
a 3.4 6.55
b 6.552 5.22$
【例4】

キーを0 0に指定すると、集計フィールドの総合計を出⼒する。
$ cat data4
a 1
b 2
c 3
$
$ sm2 0 0 2 2 data4
6$
指定したディレクトリに存在するファイルのサイズを合計するには次のようにコマンドを実⾏する。
$ ls -l directory | sm2 0 0 5 5【関連項⽬】

kasan(1) 、 plus(1) 、 ratio(1) 、 sm4(1) 、 sm5(1) 、 ysum(1)113sm4(1)【名前】
sm4 : ⼩計、中計
【書式】

Usage
: sm4 [+h] <k1> <k2> <d1> <d2> <s1> <s2> <file>
Version : Tue Oct 20 15:17:47 JST 2020
Edition : 1【説明】<file> ファイルにおけるサブキーによる⼩計や中計を計算する。k1で指定したフィールドからk2で指定したフィールドまでを主キー、d1からd2までのフィールドがサブキー、s1からs2までのフィールドまでのフィール
ドを集計フィールドとして、主キーの値が同じキーをサブキーのフィールドを⾶ばして集計フィールドを集計して各主キーの⾏の最終⾏に挿⼊する。
集計⾏におけるサブキーのフィールドは@で補完される。⼩計および中計を段階的に付与するために sm4(1) を複数回使⽤する場合には、サブキーに@が含まれる⾏は集計から除外される。キーまたは集計
フィールドいずれの範囲にも指定していないフィールドについては出⼒は実⾏されない。
【例1】$ cat data
01 埼⽟県 01 さいたま市 91 59 20 76 54
01 埼⽟県 02 川越市 46 39 8 5 21
01 埼⽟県 03 熊⾕市 82 0 23 84 10
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 ⼋王⼦市 82 79 16 21 80
02 東京都 08 ⽴川市 50 2 33 15 62
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚⽊市 48 66 23 71 24$←各都市での調査データ

県別に⼩計を出⼒する。
$ sm4 1 2 3 4 5 NF data
01 埼⽟県 01 さいたま市 91 59 20 76 54
01 埼⽟県 02 川越市 46 39 8 5 21
01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 埼⽟県 @@ @@@@@@@@@@ 219 98 51 165 85
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 ⼋王⼦市 82 79 16 21 80
02 東京都 08 ⽴川市 50 2 33 15 62
02 東京都 @@ @@@@@@@@@@ 298 215 184 110 229
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
03 千葉県 @@ @@@@@@@@@@ 207 240 112 120 82
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚⽊市 48 66 23 71 24
04 神奈川県 @@ @@@@@@@@@@ 170 134 138 211 118$【例2】

⼩計と中計を出す。

114

$ cat data
01 関東地区 01 埼⽟県 01 さいたま市 91 59 20 76 54
01 関東地区 01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 関東地区 02 東京都 04 新宿区 30 50 71 36 30
01 関東地区 02 東京都 05 中央区 78 13 44 28 51
01 関東地区 02 東京都 07 ⼋王⼦市 82 79 16 21 80
02 関⻄地区 01 ⼤阪府 01 ⼤阪市 91 59 20 76 54
02 関⻄地区 01 ⼤阪府 02 ⼋尾市 46 39 8 5 21
02 関⻄地区 01 ⼤阪府 03 川⻄市 82 0 23 84 10
02 関⻄地区 02 兵庫県 04 神⼾市 30 50 71 36 30
02 関⻄地区 02 兵庫県 05 姫路市 78 13 44 28 51
02 関⻄地区 02 兵庫県 06 明⽯市 58 71 20 10 6
02 関⻄地区 02 兵庫県 07 加古川市 82 79 16 21 80
02 関⻄地区 02 兵庫県 08 芦屋市 50 2 33 15 62
02 関⻄地区 03 京都府 09 京都市 52 91 44 9 0
02 関⻄地区 03 京都府 10 舞鶴市 60 89 33 18 6$
$ sm4 1 4 5 6 7 11 data > data2$ cat data2
01 関東地区 01 埼⽟県 01 さいたま市 91 59 20 76 54
01 関東地区 01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 関東地区 01 埼⽟県 @@ @@@@@@@@@@ 173 59 43 160 64
01 関東地区 02 東京都 04 新宿区 30 50 71 36 30
01 関東地区 02 東京都 05 中央区 78 13 44 28 51
01 関東地区 02 東京都 07 ⼋王⼦市 82 79 16 21 80
01 関東地区 02 東京都 @@ @@@@@@@@@@ 190 142 131 85 161
02 関⻄地区 01 ⼤阪府 01 ⼤阪市 91 59 20 76 54
02 関⻄地区 01 ⼤阪府 02 ⼋尾市 46 39 8 5 21
02 関⻄地区 01 ⼤阪府 03 川⻄市 82 0 23 84 10
02 関⻄地区 01 ⼤阪府 @@ @@@@@@@@@@ 219 98 51 165 85
02 関⻄地区 02 兵庫県 04 神⼾市 30 50 71 36 30
02 関⻄地区 02 兵庫県 05 姫路市 78 13 44 28 51
02 関⻄地区 02 兵庫県 06 明⽯市 58 71 20 10 6
02 関⻄地区 02 兵庫県 07 加古川市 82 79 16 21 80
02 関⻄地区 02 兵庫県 08 芦屋市 50 2 33 15 62
02 関⻄地区 02 兵庫県 @@ @@@@@@@@@@ 298 215 184 110 229
02 関⻄地区 03 京都府 09 京都市 52 91 44 9 0
02 関⻄地区 03 京都府 10 舞鶴市 60 89 33 18 6
02 関⻄地区 03 京都府 @@ @@@@@@@@@@ 112 180 77 27 6$
$ sm4 1 2 3 6 7 11 data2
01 関東地区 01 埼⽟県 01 さいたま市 91 59 20 76 54
01 関東地区 01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 関東地区 01 埼⽟県 @@ @@@@@@@@@@ 173 59 43 160 64
01 関東地区 02 東京都 04 新宿区 30 50 71 36 30
01 関東地区 02 東京都 05 中央区 78 13 44 28 51
01 関東地区 02 東京都 07 ⼋王⼦市 82 79 16 21 80
01 関東地区 02 東京都 @@ @@@@@@@@@@ 190 142 131 85 161
01 関東地区 @@ @@@@@@ @@ @@@@@@@@@@ 363 201 174 245 225
02 関⻄地区 01 ⼤阪府 01 ⼤阪市 91 59 20 76 54
02 関⻄地区 01 ⼤阪府 02 ⼋尾市 46 39 8 5 21
02 関⻄地区 01 ⼤阪府 03 川⻄市 82 0 23 84 10
02 関⻄地区 01 ⼤阪府 @@ @@@@@@@@@@ 219 98 51 165 85
02 関⻄地区 02 兵庫県 04 神⼾市 30 50 71 36 30
02 関⻄地区 02 兵庫県 05 姫路市 78 13 44 28 51
02 関⻄地区 02 兵庫県 06 明⽯市 58 71 20 10 6
02 関⻄地区 02 兵庫県 07 加古川市 82 79 16 21 80
02 関⻄地区 02 兵庫県 08 芦屋市 50 2 33 15 62
02 関⻄地区 02 兵庫県 @@ @@@@@@@@@@ 298 215 184 110 229
02 関⻄地区 03 京都府 09 京都市 52 91 44 9 0
02 関⻄地区 03 京都府 10 舞鶴市 60 89 33 18 6
02 関⻄地区 03 京都府 @@ @@@@@@@@@@ 112 180 77 27 6
02 関⻄地区 @@ @@@@@@ @@ @@@@@@@@@@ 629 493 312 302 320$【例3】

サブキーがない場合には次のような実⾏結果が得られる。

115

$ cat data
埼⽟県 91 59 20 76 54
埼⽟県 46 39 8 5 21
埼⽟県 82 0 23 84 10
東京都 30 50 71 36 30
東京都 78 13 44 28 51
東京都 58 71 20 10 6
東京都 82 79 16 21 80
東京都 50 2 33 15 62
千葉県 52 91 44 9 0
千葉県 60 89 33 18 6
千葉県 95 60 35 93 76
神奈川県 92 56 83 96 75
神奈川県 30 12 32 44 19
神奈川県 48 66 23 71 24$$ sm4 1 1 x x 2 6 data
埼⽟県 91 59 20 76 54
埼⽟県 46 39 8 5 21
埼⽟県 82 0 23 84 10@@@@@@ 219 98 51 165 85
東京都 30 50 71 36 30
東京都 78 13 44 28 51
東京都 58 71 20 10 6
東京都 82 79 16 21 80
東京都 50 2 33 15 62@@@@@@ 298 215 184 110 229
千葉県 52 91 44 9 0
千葉県 60 89 33 18 6
千葉県 95 60 35 93 76@@@@@@ 207 240 112 120 82
神奈川県 92 56 83 96 75
神奈川県 30 12 32 44 19
神奈川県 48 66 23 71 24@@@@@@ 170 134 138 211 118$【関連項⽬】

kasan(1) 、 plus(1) 、 ratio(1) 、 sm2(1) 、 sm5(1) 、 ysum(1)116sm5(1)【名前】
sm5 : ⼤計
【書式】

Usage
: sm5 [+h] <k1> <k2> <s1> <s2> <file>
Version : Sat Jun 20 21:57:22 JST 2020
Edition : 1【説明】<input> ファイルに⼤計(全⾏の合計値)⾏を追加する。k1で指定したフィールドからk2で指定したフィール

ドまでをキー、s1からs2までのフィールドを集計フィールドとして、キー以外の集計各フィールドの全合計の⾏を最終⾏に挿⼊する。この⾏のキーフィールドは@で補完される。
sm4(1) で⼩計、中計を付与されているファイルを処理する場合は、 sm4(1) で付与した@の⼩計および中計⾏は無視して⼤計を計算する。
【例1】$ cat data
01 埼⽟県 01 さいたま市 91 59 20 76 54
01 埼⽟県 02 川越市 46 39 8 5 21
01 埼⽟県 03 熊⾕市 82 0 23 84 10
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 ⼋王⼦市 82 79 16 21 80
02 東京都 08 ⽴川市 50 2 33 15 62
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚⽊市 48 66 23 71 24$←各都市での調査データ

⼤計を出⼒する。
$ sm5 1 4 5 NF data
01 埼⽟県 01 さいたま市 91 59 20 76 54
01 埼⽟県 02 川越市 46 39 8 5 21
01 埼⽟県 03 熊⾕市 82 0 23 84 10
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 ⼋王⼦市 82 79 16 21 80
02 東京都 08 ⽴川市 50 2 33 15 62
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚⽊市 48 66 23 71 24@@ @@@@@@ @@ @@@@@@@@@@ 894 687 485 606 514$【例2】

sm4(1) で⼩計および中計が追加されたデータを処理する場合は次のようになる。

117

$ cat data
01 埼⽟県 01 さいたま市 91 59 20 76 54
01 埼⽟県 02 川越市 46 39 8 5 21
01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 埼⽟県 @@ @@@@@@@@@@@@@@@@ 173 59 43 160 64
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 ⼋王⼦市 82 79 16 21 80
02 東京都 08 ⽴川市 50 2 33 15 62
02 東京都 @@ @@@@@@@@@@@@@@@@ 248 213 151 95 167
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
03 千葉県 @@ @@@@@@@@@@@@@@@@ 207 240 112 120 82
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚⽊市 48 66 23 71 24
04 神奈川県 @@ @@@@@@@@@@@@@@@@ 170 134 138 211 118$$ sm5 1 4 5 NF data
01 埼⽟県 01 さいたま市 91 59 20 76 54
01 埼⽟県 02 川越市 46 39 8 5 21
01 埼⽟県 03 熊⾕市 82 0 23 84 10
01 埼⽟県 @@ @@@@@@@@@@@@@@@@ 173 59 43 160 64
02 東京都 04 新宿区 30 50 71 36 30
02 東京都 05 中央区 78 13 44 28 51
02 東京都 06 港区 58 71 20 10 6
02 東京都 07 ⼋王⼦市 82 79 16 21 80
02 東京都 08 ⽴川市 50 2 33 15 62
02 東京都 @@ @@@@@@@@@@@@@@@@ 248 213 151 95 167
03 千葉県 09 千葉市 52 91 44 9 0
03 千葉県 10 市川市 60 89 33 18 6
03 千葉県 11 柏市 95 60 35 93 76
03 千葉県 @@ @@@@@@@@@@@@@@@@ 207 240 112 120 82
04 神奈川県 12 横浜市 92 56 83 96 75
04 神奈川県 13 川崎市 30 12 32 44 19
04 神奈川県 14 厚⽊市 48 66 23 71 24
04 神奈川県 @@ @@@@@@@@@@@@@@@@ 170 134 138 211 118@@ @@@@@@ @@ @@@@@@@@@@ 894 687 485 606 514$【コラム】sm系コマンドの合わせ⽅

データを集計する帳票をTukubaiで記述する場合、同じキーを集計して⼩計、中計を出して最後に⼤計を出す、という処理が頻出する。こういった場合は sm2(1) 、 sm4(1) 、 sm5(1) を次のように多段に組み合わせて使⽤することが多い。
$ cat data
sm2 1 6 7 NF
sm4 1 4 5 6 7 NF
sm4 1 2 3 6 7 NF
sm5 1 6 7 NF > result

|
|
|
|

←同⼀キーで集計←⼩計←中計←⼤計を出⼒【関連項⽬】

kasan(1) 、 plus(1) 、 ratio(1) 、 sm2(1) 、 sm4(1) 、 ysum(1)118tarr(1)【名前】
tarr : 横型のデータを縦型に展開
【書式】

Usage
: tarr [-<n>] [-d<str>] [num=<m>] <file>
Version : Mon Jul 25 20:20:42 JST 2022
Edition : 1【説明】

指定したファイルの第1フィールドから

num=<n>で指定したフィールドまでのフィールドをキーとして、横に並んでいるフィールドデータを縦に展開して並べ直す。 <file> として - を指定すると標準⼊⼒を使⽤する。
【例1】基本的な使い⽅$ cat data
0000000 浜地______ 50 F 91 59 20 760000001 鈴⽥______ 50 F 46 39 8 50000003 杉⼭______ 26 F 30 50 71 360000004 ⽩⼟______ 40 M 58 71 20 10$$ tarr num=4 data
0000000 浜地______ 50 F 91
0000000 浜地______ 50 F 59
0000000 浜地______ 50 F 200000000 浜地______ 50 F 76
0000001 鈴⽥______ 50 F 460000001 鈴⽥______ 50 F 39
0000001 鈴⽥______ 50 F 80000001 鈴⽥______ 50 F 50000003 杉⼭______ 26 F 30
0000003 杉⼭______ 26 F 50
0000003 杉⼭______ 26 F 71
0000003 杉⼭______ 26 F 36
0000004 ⽩⼟______ 40 M 58
0000004 ⽩⼟______ 40 M 71
0000004 ⽩⼟______ 40 M 200000004 ⽩⼟______ 40 M 10$

←第4フィールドまでをキーに縦に展開【例2】-<n> オプションを使⽤すると <n> フィールドごとに縦展開する。

$ tarr -2 num=4 data
0000000 浜地______ 50 F 91 59
0000000 浜地______ 50 F 20 760000001 鈴⽥______ 50 F 46 390000001 鈴⽥______ 50 F 8 50000003 杉⼭______ 26 F 30 50
0000003 杉⼭______ 26 F 71 360000004 ⽩⼟______ 40 M 58 71
0000004 ⽩⼟______ 40 M 20 10$←2フィールド毎に縦展開する。

【例3】
num=<n>を指定しないと単純に縦展開する。

$ cat data3
1 2 3 45 6$
$ tarr data3
1
2
3
4
5
6
$

119

【例4】
-d <str> オプションを使うことで縦展開するフィールドのフィールドセパレータを指定できる。
<n>で指定されるキーフィールドは空⽩区切りである必要がある。
$ cat data
0000000 浜地______ 50 F 91@59@20@76@540000001 鈴⽥______ 50 F 46@39@8@5@210000003 杉⼭______ 26 F 30@50@71@36@30
0000004 ⽩⼟______ 40 M 58@71@20@10@6$$ tarr -d@ num=4 data
0000000 浜地______ 50 F 91
0000000 浜地______ 50 F 59
0000000 浜地______ 50 F 200000000 浜地______ 50 F 76
0000000 浜地______ 50 F 54
0000001 鈴⽥______ 50 F 460000001 鈴⽥______ 50 F 39
0000001 鈴⽥______ 50 F 80000001 鈴⽥______ 50 F 50000001 鈴⽥______ 50 F 210000003 杉⼭______ 26 F 30
0000003 杉⼭______ 26 F 50
0000003 杉⼭______ 26 F 71
0000003 杉⼭______ 26 F 36
0000003 杉⼭______ 26 F 30
0000004 ⽩⼟______ 40 M 58
0000004 ⽩⼟______ 40 M 71
0000004 ⽩⼟______ 40 M 200000004 ⽩⼟______ 40 M 100000004 ⽩⼟______ 40 M 6$$ cat data2
0001 1n2n30002 4n5n6$$ tarr -d'n' num=1 data2
0001 10001 20001 30002 40002 50002 6$【関連項⽬】

yarr(1)120

num=

tateyoko(1)【名前】
tateyoko : 縦テキストを横テキストへ変換
【書式】

Usage
: tateyoko <file>
Version : Sat Jun 20 21:57:22 JST 2020
Edition : 1【説明】<file> の⾏を列に縦横変換する。ファイル名が - の時は、標準⼊⼒ファイルを取り込む。 <file> として - を指定すると標準⼊⼒を使⽤する。
【例1】$ cat data
1 2 3
A B C
4 5 6
$
$ tateyoko data
1 A 4
2 B 5
3 C 6
$
【例2】

map(1) の出⼒を縦横変換する。
$ cat data
A 10/01 1
A 10/02 2
A 10/03 3
B 10/01 4
B 10/02 5
B 10/03 6$$ map num=1 data | keta * 10/01 10/02 10/03
A
1
2
3
B
4
5
6
$
$ map num=1 data | tateyoko - | keta *A B
10/01 1 4
10/02 2 5
10/03 3 6$
【備考】

tateyoko(1) は指定ファイルを⼀旦すべてメモリへ展開する。
【関連項⽬】

map(1) 、 unmap(1)121tcat(1)【名前】
tcat : ファイルを縦へ並べ替え
【書式】

Usage
: tcat [-n] <file1> <file2>...
Version : Sat Jun 20 21:57:22 JST 2020
Edition : 1【説明】

引数で指定した複数のファイルを縦に並べて連結して出⼒する。
【例1】$ cat file1---試験結果--⽒名No ⽒名$$ cat file2
0000008 ⾓屋______
0000009 ⽶原______
0000010 柳本______
0000011 安武______
$

年齢 性別

50
68
50
55

A

B

C

D

E

F 52 91 44 9 0
F 60 89 33 18 6
F 95 60 35 93 76
F 92 56 83 96 75$ tcat file1 file2---試験結果--⽒名No ⽒名
年齢 性別 A B C D E0000008 ⾓屋______
50
F 52 91 44 9 00000009 ⽶原______
68
F 60 89 33 18 60000010 柳本______
50
F 95 60 35 93 76
0000011 安武______
55
F 92 56 83 96 75$【例2】-<n> オプションを使⽤すると、ファイルを <n> - で指定した⾏数分だけ間をあけて連結することができる。
2⾏あけて連結するには次のようにコマンドを実⾏する。
$ tcat -2 file1 file2---試験結果--⽒名No ⽒名
年齢 性別0000008 ⾓屋______
0000009 ⽶原______
0000010 柳本______
0000011 安武______
$

50
68
50
55

A

B

C

D

E

F 52 91 44 9 0
F 60 89 33 18 6
F 95 60 35 93 76
F 92 56 83 96 75【例3】

標準⼊⼒から読み込む場合、標準⼊⼒側のテキストを引数 - で指定する。
$ cat file1 | tcat - file2【関連項⽬】

ctail(1) 、 getfirst(1) 、 getlast(1) 、 ycat(1)122tocsv(1)【名前】
tocsv : スペース区切りファイルをCSVファイルに変換する
【書式】

Usage
Option: tocsv [<f1> <f2> ... <file>]: -s<space_string>-n<null_string>
Version : Mon Sep 19 13:18:58 JST 2022
【説明】

スペース区切りファイルをCSVファイルに変換します。コマンド引数で指定したフィールドは⽂字列2と⾒なし、 " " で囲んだ形式に変換します。指定していないフィールドは⽂字列0とみなし、 " " で囲みません。
ファイル名を指定しない場合、および "-" の時は、標準⼊⼒を期待します。
【仕様】

1. ⽂字列 _ は ヌル⽂字列に変換します。 ( -n オプションで _ を別の⽂字列に変更できます)2. ⽂字列 \c は cに変換します。3. ⽂字列 \ ⼀⽂字は(半⾓スペース)に変換します。4. _ を半⾓スペースに変換します。 ( -s オ
プションで _ を別の⽂字列に変更できます)5. ⾏末の \n は⾃動的に \r \n に変換します。6. ⽂字列1の場合、"は "" に変換します。
【例1】$ cat data
a _ \_ \ b_c b\_c "$ tocsv 1/NF data"a","","_"," ","b c","b_c",""""【例2】$ tocsv data
a,,_, ,b c,b_c,"【例3】$ echo the_first @ | tocsv -n@"the first",""【例4】$ echo the_first this_is_apple | tocsv -s_apple"the first","this is "【関連項⽬】

fromcsv(1)123uconv(1)【名前】
uconv : UTF-8 <=> Shift JIS / EUC-JP コード変換
【書式】

Usage
: uconv <field> <str> <file>
Option : --through <str>Version : Sun Aug 28 13:24:22 JST 2022
Edition : 1【説明】

UTF-8 と Shif-JIS, EUC-JP の相互の⽂字コード変換を⾏います。オプションと変換の対応は、以下のようになります。
-stou :
-utos :
-stou :
-utos :
-ltou :
-utol :

Shift-JIS から UTF-8
UTF-8 から Shift-JIS
EUC-JP から UTF-8
UTF-8 から EUC-JP
ISO-8851-1 から UTF-8
UTF-8 から ISO-8851-1

ファイル名が省略された時及び "-" の時は標準⼊⼒から⼊⼒します。

124

ulock(1)【名前】
ulock : 排他制御コマンド
【書式】

Usage
Usage

: ulock <lock-file>: ulock -w <lock-file> [<counter-file>]ulock -r <lock-file> <counter-file> <command>
Option : --timeout=<sec>/--invalid=<sec>Version : Fri Oct 21 11:26:06 JST 2011
Edition : 1【説明】

書式１( ulock <lock-file> )は、完全排他区間を実現します。この場合、 ulock は排他的に <lockfile> を⽣成します。

書式２は、リード・ライトロックを実現します。 -w (ライトロック)の場合、 ulock は排他的に <lockfile> を⽣成した上に、 <counter-file> のリンクカウントが１になるまで待ちます。 -r (リードロック)の場合、 <lock-file> が存在しなくなるまで、 <counter-file> のリンクカウントを１増やすことを試み、成功したら、 <command> を実⾏し、そのあと、 <counter-file> のリンクカウントを１減らします。
--timeout オプションで comma nd が起動されるまでの待ち時間の最⼤値を指定できます。-1 を指定すると無限に待ちます。デフォルトは -1 (無限に待つ)です。
--invalid オプションで古いロックファイルの削除を⾏います。デフォルトは 60 秒です。
【例１】 完全排他区間の実現$ cat lock.sh#!/bin/bash
if ulock lock; then#
# 読み書きなどの処理#
rm -f lockfi【例２】 リードライトロックの実現$ cat writelock.sh#!/bin/bash
if ulock -w lock counter; then
# 書き込み処理(例)up3 key=1 master tran > master.new
mv master.new masterrm -f lockfi
$ cat readlock.sh#!/bin/bash
ulock -r lock counter cat master【備考】 リードライトロックのアルゴリズム
ライトロックX - - 書き込みロックを取る。(アトミック)X - - カウンタ1まで待つ。
- - - 書き込み処理- - - 書き込みロックをはずす。

リードロックX - - カウンタを1⾜す。(アトミック)125

X - - 書き込みロックがないことを確認。ロックされていれば 1 減らして戻る。
X - - 読むだけの処理
X - - カウンタを1減らす (アトミック)

ulock では書き込みロックはハードリンクファイル⽣成の⼀意性を利⽤し、カウンタオペレーションは、

ハードリンクファイルのリンク(⼀意)数を利⽤しています。 ulock は上記アルゴリズムのうち、X の部分を実装しています。
lock-file 、 counter-file とも NFS 上に作成すれば、各サーバーからのリードライトロックが実現し

ます。

126

unmap(1)【名前】
unmap : 縦キー/横キー形式の表データを縦型ファイルに変換
【書式】

Usage

: map
[-<l>] num=<n>x<m> <file>: map +yarr [-<l>] num=<n>x<m> <file>: map +arr [-<l>] num=<n>x<m> <file>
Version : Fri Nov 20 17:00:13 JST 2020
Edition : 1【説明】

map(1) と逆の動作をする。
【例1】

表データを縦型ファイルに変換する。

num=<n>の値は縦キーのフィールド数を表す。

$ cat data*
* 01/01 01/02
001 a店103
157
002 b店210
237$$ unmap num=2 data |001 a店 01/01 103
001 a店 01/02 157
002 b店 01/01 210
002 b店 01/02 237
$

keta

【例2】

データ部が複数種ある場合は、複数列にマッピングする。
$ cat data
* * 1⽇⽬ 2⽇⽬ 3⽇⽬ 4⽇⽬ 5⽇⽬ 6⽇⽬ 7⽇⽬
a店 A
103
157
62
131
189
350
a店 B
62
94
30
84
111
20
b店 A
210
237
150
198
259
421
b店 B
113
121
82
105
189
287
c店 A
81
76
38
81
98
109
c店 B
52
49
21
48
61
91
d店 A
75
72
34
74
91
98
d店 B
48
42
19
43
51
69
$
$ unmap num=1 data |a店 1⽇⽬ 103 62
a店 2⽇⽬ 157 94
a店 3⽇⽬ 62 30
a店 4⽇⽬ 131 84
・・
d店 6⽇⽬ 98 69
d店 7⽇⽬ 101 90
$

412
301
589
493
136
110
101
90

keta

【関連項⽬】

map(1) 、 tateyoko(1)127up3(1)【名前】
up3 : 2つのファイルを同⼀キーフィールドでマージ
【書式】

Usage
: up3 key=<key> <master> [<tran>]
Version : Fri Nov 20 17:00:13 JST 2020
Edition : 1【説明】masterとtranの各⾏を key= で指定されたフィールド値で⽐較し、同じキーフィールドを持つ⾏をmasterの該
当⾏の下に挿⼊して出⼒する。masterもtranもキーとなるフィールドは整列されている必要がある。tran指定を省略すると標準⼊⼒(stdin)からの⼊⼒となる。
【例1】$ cat master
a店 1⽇⽬ 103 62
a店 2⽇⽬ 157 94
a店 3⽇⽬ 62 30
b店 1⽇⽬ 210 113
b店 2⽇⽬ 237 121
b店 3⽇⽬ 150 82
c店 1⽇⽬ 81 52
c店 2⽇⽬ 76 49
c店 3⽇⽬ 38 21$$ cat tran
a店 4⽇⽬ 131 84
a店 5⽇⽬ 189 111
b店 4⽇⽬ 198 105
b店 5⽇⽬ 259 189
c店 4⽇⽬ 81 48
c店 5⽇⽬ 98 61$$ up3 key=1 master tran
a店 1⽇⽬ 103 62
a店 2⽇⽬ 157 94
a店 3⽇⽬ 62 30
a店 4⽇⽬ 131 84
a店 5⽇⽬ 189 111
b店 1⽇⽬ 210 113
b店 2⽇⽬ 237 121
b店 3⽇⽬ 150 82
b店 4⽇⽬ 198 105
b店 5⽇⽬ 259 189
c店 1⽇⽬ 81 52
c店 2⽇⽬ 76 49
c店 3⽇⽬ 38 21
c店 4⽇⽬ 81 48
c店 5⽇⽬ 98 61$←1⽇⽬から3⽇⽬までのデータ← 4⽇⽬から5⽇⽬までのデータ←masterのa店の下にtranのa店がきている

複数のキーフィールドを指定する場合は key=2@1 のように@でつないで指定する。
【関連項⽬】

join0(1) 、 join1(1) 、 join2(1) 、 loopj(1) 、 loopx(1) 、 マスタファイル(5) 、 トランザクション
ファイル(5)128

wjson(1)【名前】
wjson : フィールド形式ファイルを JSON 形式に変換する
【書式】

Usage

: wjson [-p<c>][-m<c>][-s<c>][-n<string>] [<field-file>]--null--truefalse
Version : Fri Oct 28 08:01:44 JST 2022
Edition : 2【説明】フィールド形式ファイル <field -file > を JSON 形式(RFC8259)に変換します。
キー部の項⽬はデフォルトで "." で区切られますが、値が数字の時は、リストの項番を意味し、それ以外(⽂字列)の時は、オブジェクトのキー名を意味します。キー部の階層構造に従い、フィールド形式のファイルをJSON 形式に変換します。
【オプション】-p : キー部の区切り⽂字を変更します。デフォルトは "." です。
-m : キー部において半⾓空⽩で出⼒する⽂字を変更します。デフォルトは "_" です。
-s : 値部において半⾓空⽩で出⼒する⽂字を変更します。デフォルトは "_" です。
-n : 値部において空⽂字列として出⼒する⽂字列を変更します。デフォルトは "_" です。
--null : 空⽂字列の出⼒を、ヌル値に変更します。ダブルクォーテーションで 囲まれない null が出⼒されます。
--truefalse : ⽂字列 "true" の出⼒を true に、⽂字列 "false" の出⼒を false に 変更します。ダブルクォー

テーションでは囲まれません。
【備考】

値に含まれる以下の⽂字はエスケープされます。
ダブルクォーテーション(") → \"バックスラッシュ(\) → \\【例１】

$ cat fielddata
1.name Alice_Brown
1.sku 54321
1.price 199.95
1.shipTo.name Bob_Brown
1.shipTo.address 456_Oak_Lane
1.shipTo.city Pretendville1.shipTo.state _1.shipTo.zip 98999
1.billTo.name Alice_Brown
1.billTo.address 456_Oak_Lane
1.billTo.city Pretendville
1.billTo.state HI
1.billTo.zip 98999
2.name Donald_Tramp
2.sku 24680
2.price 153.32
2.shipTo.name Kim_Jonil2.shipTo.address 123_Hidroask
2.shipTo.city Pyonyan
2.shipTo.state NK
2.shipTo.zip 10012
2.billTo.name Donald_Tramp
2.billTo.address 456_Oak_Lane
2.billTo.city Pretendville
2.billTo.state HI
2.billTo.zip 98999

129

$ wjson < fielddata[{"name":"Alice Brown","sku":"54321","price":"199.95","shipTo":{"name":"Bob
Brown","address":"456 Oak
Lane","city":"Pretendville","state":"","zip":"98999"},"billTo":{"name":"Alice
Brown","address":"456 Oak
Lane","city":"Pretendville","state":"HI","zip":"98999"}},{"name":"Donald
Tramp","sku":"24680","price":"153.32","shipTo":{"name":"Kim
Jonil","address":"123
Hidroask","city":"Pyonyan","state":"NK","zip":"10012"},"billTo":{"name":"Donald
Tramp","address":"456 Oak
Lane","city":"Pretendville","state":"HI","zip":"98999"}}]【例２】$ cat fielddata2
1.1 a
1.2 b
2.1 c
2.2 d
$ wjson fielddata2[["a","b"],["c","d"]]【例３】$ cat fielddata3
year 2013
title Turn_It_Down,_Or_Else!
info.directors.1 Alice_Smithinfo.directors.2 Bob_Jones
info.release_date 2013-01-18T00:00:00Z
info.rating 6.2
info.genres.1 Comedy
info.genres.2 Drama
info.image_url http://ia.mediaimdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg…
info.plot A_rock_band_plays_their_music_at_high_volumes,_annoying_the_neighbors.
info.rank 11
info.running_time_secs 5215
info.actors.1 David_Matthewman
info.actors.2 Ann_Thomas
info.actors.3 Jonathan_G._Neff
第1引数にファイルのパスを与える。
$ wjson fielddata3{"year":"2013","title":"Turn It Down, Or Else!","info":{"directors":["Alice
Smith","Bob Jones"],"release date":"2013-0118T00:00:00Z","rating":"6.2","genres":["Comedy","Drama"],"imageurl":"http://ia.mediaimdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@. V1 SX400.jpg","plot":"A rock band plays their music at high volumes, annoying theneighbors.","rank":"11","running time secs":"5215","actors":["David
Matthewman","Ann Thomas","Jonathan G. Neff"]}}【例４】$ cat fielddata
data1 null
data2 _
data3 _
data4 true
data5 false
data6 0.000000000000000000000000000000000662607$ wjson fielddata{"data1":"null","data2":"","data3":"","data4":"true","data5":"false","data6":"0.000…
--truefalse オプション を⽤いると⽂字列型ではなく真偽値として表記する。

$ wjson --null --truefalse fielddata{"data1":"null","data2":null,"data3":null,"data4":true,"data5":false,"data6":"0.000…
-n オプションにつづけて空の⽂字列を代替するラベルを指定する。

$ wjson -nnull --null --truefalse fielddata{"data1":null,"data2":" ","data3":"","data4":true,"data5":false,"data6":"0.000000000000000000000000000000000662607"}…
【関連項⽬】

130

rjson(1)131xmldir(1)【名前】
xmldir : ディレクトリタグの絶対パスを指定して、XMLデータをフィールド 形式に変換する。
【書式】

Usage
: xmldir /<DirTag1>/<DirTag2>/.../<DirTagN> [<xmlfile>]
Option : -c<n>Version : Sun Aug 28 11:35:26 JST 2022
Edition : 1【説明】

ディレクトリタグの絶対パスを指定して、絶対パスとすべてのサブツリーの項⽬、属性、値を出⼒します。出⼒は末端のファイルパスに対して１⾏出⼒されます。
-c オプションで、指定パスのインデックスが出⼒されます。 -s オプションで設定した⽂字が空⽩の代わりに出⼒されます。
N 階層のパスの場合、インデックスは N 個となり、タグが繰り返されるとインデックスはインクリメントされます。上位のタグがインクリメントされた場合、下位のタグのインデックスは１にリセットされます。
-c <n> の場合、インデックスは前０埋め <n> 桁の数字になります。
【例１】 単純な例$ cat xml
<dir1><dir2><day>23/Jul.2022</day><day>24/Jul.2022</day></dir2><dir2><day>25/Jul.2022</day><day>26/Jul.2022</day></dir2></dir1>$ xmldir /dir1/dir2 xml
dir1 dir2 day 23/Jul.2022
dir1 dir2 day 24/Jul.2022
dir1 dir2 day 25/Jul.2022
dir1 dir2 day 26/Jul.2022$ xmldir -c3 /dir1/dir2 xml
001 001 dir1 dir2 day 23/Jul.2022
001 001 dir1 dir2 day 24/Jul.2022
001 002 dir1 dir2 day 25/Jul.2022
001 002 dir1 dir2 day 26/Jul.2022【例２】 テキストに空⽩を含む例$ cat xml
<dir1><dir2><day>23 Jul 2022</day><day>24 Jul 2022</day></dir2><dir2><day>25 Jul 2022</day><day>26 Jul 2022</day></dir2></dir1>$ xmldir -s= /dir1/dir2 xml
dir1 dir2 day 23=Jul=2022
dir1 dir2 day 24=Jul=2022
dir1 dir2 day 25=Jul=2022
dir1 dir2 day 26=Jul=2022【例３】 実⽤的な例

132

$ cat xml<dir1><dir2><attributes><data>a</data></attributes></dir2><dir2><attributes><data>b</data><data>c</data></attributes><attributes><data>d</data></attributes></dir2></dir1><dir1><dir2><attributes><data>e</data></attributes><attributes><data>f</data></attributes><attributes><data>g</data></attributes></dir2></dir1>$ xmldir -c3 /dir1/dir2/attributes xml
001 001 dir1 dir2 attributes data a
001 002 dir1 dir2 attributes data b
001 003 dir1 dir2 attributes data c
001 004 dir1 dir2 attributes data d002 005 dir1 dir2 attributes data e002 006 dir1 dir2 attributes data f
002 007 dir1 dir2 attributes data g【関連項⽬】

rjson(1)133

yarr(1)【名前】
yarr : 縦型のデータを横型に展開
【書式】

Usage

: yarr [-<n>][-d<str>] [<file>]: yarr [-<n>][-d<str>] num=<n> [<file>]
Version : Wed Aug 3 07:01:40 JST 2022
Edition : 1【説明】

指定したファイルの第1フィールドから

num=<n>で指定したフィールド数までのフィールドをキーとし、キーが同⼀の⾏のフィールドを横に展開して1⾏として出⼒する。 <file> として - を指定すると標準⼊⼒を使⽤する。
【例1】基本的な使い⽅$ cat data
0000000 浜地______ 50 F 91
0000000 浜地______ 50 F 59
0000000 浜地______ 50 F 200000000 浜地______ 50 F 76
0000001 鈴⽥______ 50 F 460000001 鈴⽥______ 50 F 39
0000001 鈴⽥______ 50 F 80000001 鈴⽥______ 50 F 50000003 杉⼭______ 26 F 30
0000003 杉⼭______ 26 F 50
0000003 杉⼭______ 26 F 71
0000003 杉⼭______ 26 F 36
0000004 ⽩⼟______ 40 M 58
0000004 ⽩⼟______ 40 M 71
0000004 ⽩⼟______ 40 M 200000004 ⽩⼟______ 40 M 10$
$ yarr num=4 data
0000000 浜地______ 50 F 91 59 20 760000001 鈴⽥______ 50 F 46 39 8 50000003 杉⼭______ 26 F 30 50 71 360000004 ⽩⼟______ 40 M 58 71 20 10$【例2】-<n> オプションを使うことで <n> 個ずつ横展開できる。

$ yarr -2 num=4 data > data3$ cat data3
0000000 浜地______ 50 F 91 59
0000000 浜地______ 50 F 20 760000001 鈴⽥______ 50 F 46 390000001 鈴⽥______ 50 F 8 50000003 杉⼭______ 26 F 30 50
0000003 杉⼭______ 26 F 71 360000004 ⽩⼟______ 40 M 58 71
0000004 ⽩⼟______ 40 M 20 10$【例3】
num=<n>を指定しない場合単純に横展開する。

$ cat data4
1
2
3
4
$
$ yarr data4
1 2 3 4
$
【例4】

134

-d <str> オプションは横展開するときのフィールドセパレータを指定する。

$ yarr -d@ num=4 data > data2$ cat data2
0000000 浜地______ 50 F 91@59@20@76
0000001 鈴⽥______ 50 F 46@39@8@50000003 杉⼭______ 26 F 30@50@71@36
0000004 ⽩⼟______ 40 M 58@71@20@10$$ yarr -d'n' num=4 data
0000000 浜地______ 50 F 91n59n20n76
0000001 鈴⽥______ 50 F 46n39n8n50000003 杉⼭______ 26 F 30n50n71n36
0000004 ⽩⼟______ 40 M 58n71n20n10$【関連項⽬】

tarr(1)135

ycat(1)【名前】
ycat : ファイルの横連結
【書式】

Usage
: ycat [-n] file1 file2 ....
Version : Sat Jun 20 21:57:22 JST 2020
Edition : 1【説明】

引数で指定した複数のファイルを横に並べて連結して出⼒する。各ファイルの形は崩れることはなく、ファイルの⾒た⽬そのままに横連結する。
【例1】基本的な使い⽅$ cat file1
0000000 浜地______ 50 F
0000001 鈴⽥______ 50 F
0000003 杉⼭______ 26 F
0000004 ⽩⼟______ 40 M
0000005 崎村______ 50 F
0000007 梶川______ 42 F$
$ cat file2
0000000 91 59 20 76 540000001 46 39 8 5 210000003 30 50 71 36 300000004 58 71 20 10 60000005 82 79 16 21 80
0000007 50 2 33 15 62$$ ycat file1 file2
0000000 浜地______ 50 F 0000000 91 59 20 76 540000001 鈴⽥______ 50 F 0000001 46 39 8 5 210000003 杉⼭______ 26 F 0000003 30 50 71 36 300000004 ⽩⼟______ 40 M 0000004 58 71 20 10 60000005 崎村______ 50 F 0000005 82 79 16 21 80
0000007 梶川______ 42 F 0000007 50 2 33 15 62$【例2】-<n> オプションを使⽤すると、ファイルを <n> で指定した空⽩の分だけ間を空けることができる。

$ ycat -3 file1 file2
0000000 浜地______ 50 F
0000001 鈴⽥______ 50 F
0000003 杉⼭______ 26 F
0000004 ⽩⼟______ 40 M
0000005 崎村______ 50 F
0000007 梶川______ 42 F$

0000000 91 59 20 76 540000001 46 39 8 5 210000003 30 50 71 36 300000004 58 71 20 10 60000005 82 79 16 21 80
0000007 50 2 33 15 62【例3】-0を指定した場合にはファイルの隙間は追加されない。
$ ycat -0 file1 file2
0000000 浜地______ 50 F0000000 91 59 20 76 540000001 鈴⽥______ 50 F0000001 46 39 8 5 210000003 杉⼭______ 26 F0000003 30 50 71 36 300000004 ⽩⼟______ 40 M0000004 58 71 20 10 60000005 崎村______ 50 F0000005 82 79 16 21 80
0000007 梶川______ 42 F0000007 50 2 33 15 62$【例4】

テキストを標準⼊⼒から読み込む場合には - を記述する。
$ cat file1 | ycat - file2$ cat file2 | ycat file1 -

136

【備考】

ycat(1) は連結後の各ファイルの形が崩れないように、はじめに各ファイルの最⼤幅を測っている。このため、単純に空⽩横連結したいだけなら次のように paste(1) (https://linuxjm.osdn.jp/html/gnumaniak/man1/paste.1.html)
コマンドを使う⽅が⾼速となる。
$ paste -d" " file1 file2 file3【関連項⽬】

ctail(1) 、 getfirst(1) 、 getlast(1) 、 tcat(1)137yobi(1)【名前】
yobi : 曜⽇算出
【書式】

Usage

: yobi [-e|-j] <field> <filename>yobi -d [-e|-j] <string>
Version : Sat Jun 20 21:57:23 JST 2020
Edition : 1【説明】

引数や標準⼊⼒から読み込んだファイルの指定したフィールドの年⽉⽇の曜⽇のコードを指定したフィールドの次のフィールドに挿⼊して出⼒する。元ファイルの⽇付のフォーマットはYYYYMMDDの8桁である必要があ
り、曜⽇のコードは(⽇=0、⽉=1、⽕=2、⽔=3、⽊=4、⾦=5、⼟=6)で出⼒する。
【例1】$ cat data
0001 0000007 20060201 117 8335 -145
0001 0000007 20060203 221 15470 00001 0000007 20060205 85 5950 00001 0000007 20060206 293 20527 -170001 0000007 20060207 445 31150 00002 0000007 20060208 150 11768 -1268
0002 0000007 20060209 588 41160 00002 0000007 20060210 444 31080 0$$ yobi 3 data
0001 0000007 20060201 3 117 8335 -145
0001 0000007 20060203 5 221 15470 00001 0000007 20060205 0 85 5950 00001 0000007 20060206 1 293 20527 -170001 0000007 20060207 2 445 31150 00002 0000007 20060208 3 150 11768 -1268
0002 0000007 20060209 4 588 41160 00002 0000007 20060210 5 444 31080 0$【例2】-e オプションを指定すると英語表記の曜⽇を挿⼊して出⼒する。

$ yobi -e 3 data
0001 0000007 20060201 Wed 117 8335 -145
0001 0000007 20060203 Fri 221 15470 00001 0000007 20060205 Sun 85 5950 00001 0000007 20060206 Mon 293 20527 -170001 0000007 20060207 Tue 445 31150 00002 0000007 20060208 Wed 150 11768 -1268
0002 0000007 20060209 Thu 588 41160 00002 0000007 20060210 Fri 444 31080 0$【例3】-j オプションで⽇本語表記の曜⽇を挿⼊して出⼒する。

$ yobi -j 3 data
0001 0000007 20060201 ⽔ 117 8335 -145
0001 0000007 20060203 ⾦ 221 15470 00001 0000007 20060205 ⽇ 85 5950 00001 0000007 20060206 ⽉ 293 20527 -170001 0000007 20060207 ⽕ 445 31150 00002 0000007 20060208 ⽔ 150 11768 -1268
0002 0000007 20060209 ⽊ 588 41160 00002 0000007 20060210 ⾦ 444 31080 0$【例4】-d オプションで引数に指定した⽇付に対して曜⽇を算出する。

138

$ yobi -d 20080112
6$$ yobi -de 20080112
Sat$$ yobi -dj 20080112
⼟$【関連項⽬】

calclock(1) 、 dayslash(1) 、 mdate(1)139ysum(1)【名前】
ysum : 横集計
【書式】

Usage
: ysum [+h] [num=<n>] <file>
Version : Sat Jun 20 21:57:23 JST 2020
Edition : 1【説明】<file> ファイルの、同⼀⾏内の各フィールドの合計を⾏末に追加する。

の次以降の全フィールドを集計して最終フィールドの後に追加する。

num=<n>num=<n>で指定したフィールドを省略した場合、 num=0 と同じ動作をする。 <file> として - を指定すると標準⼊⼒を使⽤する。
【例1】$ cat data
0000000 浜地______ 50 F 91 59 20 76 540000001 鈴⽥______ 50 F 46 39 8 5 210000003 杉⼭______ 26 F 30 50 71 36 300000004 ⽩⼟______ 40 M 58 71 20 10 60000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2 33 15 62$←番号 ⽒名 年齢 性別 教科別点数A B C D E

教科別の点数(5フィールド⽬以降)を集計して最終フィールドの次に追加する。
$ ysum num=4 data
0000000 浜地______ 50 F 91 59 20 76 54 300
0000001 鈴⽥______ 50 F 46 39 8 5 21 119
0000003 杉⼭______ 26 F 30 50 71 36 30 217
0000004 ⽩⼟______ 40 M 58 71 20 10 6 165
0000005 崎村______ 50 F 82 79 16 21 80 278
0000007 梶川______ 42 F 50 2 33 15 62 162$【例2】+h オプションを指定すると先頭⾏以外の⾏を集計する。先頭⾏が項⽬名などのヘッダーのデータなどに使⽤する。このとき先頭⾏の集計値フィールドには@が追加される。
先頭⾏を⾶ばして教科別の点数(5フィールド⽬以降)を集計して最終フィールドの次に追加するには次のようにコマンドを実⾏する。
$ cat data
No ⽒名 年齢 性別 A B C D E0000000 浜地______ 50 F 91 59 20 76 540000001 鈴⽥______ 50 F 46 39 8 5 210000003 杉⼭______ 26 F 30 50 71 36 300000004 ⽩⼟______ 40 M 58 71 20 10 60000005 崎村______ 50 F 82 79 16 21 80
0000007 梶川______ 42 F 50 2 33 15 62$←番号 ⽒名 年齢 性別 教科別点数A B C D…

$ ysum +h num=4 data | keta No
⽒名 年齢 性別 A B C D E@ ←先頭⾏の集計欄には@がつく
0000000 浜地______
50
F 91 59 20 76 54 300
0000001 鈴⽥______
50
F 46 39 8 5 21 119
0000003 杉⼭______
26
F 30 50 71 36 30 217
0000004 ⽩⼟______
40
M 58 71 20 10 6 165
0000005 崎村______
50
F 82 79 16 21 80 278
0000007 梶川______
42
F 50 2 33 15 62 162$【関連項⽬】

kasan(1) 、 plus(1) 、 ratio(1) 、 sm2(1) 、 sm4(1) 、 sm5(1)140zen(1)【名前】
zen : 全⾓へ変換
【書式】

Usage

: zen [-k] [<f1> <f2> ..] [<file>]: zen -d [<string>]
Version : Oct 20 17:32:09 JST 2022
Edition : 1【説明】

引数のファイルまたは標準⼊⼒におけるテキストデータの半⾓英数記号およびカタカナをすべて全⾓に変換して出⼒する。フィールド指定において0は全フィールドを意味する。コマンド⼊⼒が「 zen 」でパラメータがないときはコマンドの構⽂を表⽰して終了する。
【例1】

引数のファイルの指定したフィールドの中⾝を全⾓に変換する。
$ cat data
これは ﾃﾞｰﾀ です。
This is data
123 456 7890$
$ zen 1 2 3 data
これは データ です。
Ｔｈｉｓ ｉｓ ｄａｔａ
１２３ ４５６ ７８９０$
【例2】

フィールドを指定しない場合は⾏全体を全⾓にする。半⾓空⽩も全⾓空⽩に変換する。
$ cat data
1 2 3
$ cat data | zen
１ ２ ３
$
【例3】
zen -k <file> の場合、 <file> の半⾓カタカナだけ全⾓にする。メールの表題や本⽂には半⾓カナは使えないため、このフィルタを使⽤して前処理を実施する。
$ cat data2
123ｱｲｳｴｵ$ cat data2 | zen -k
123アイウエオ$【例4】-d オプションは引数で指定された⽂字列の半⾓の部分を全⾓に変えて出⼒する。

$ zen -d ｶﾀｶﾅABC123
カタカナＡＢＣ１２３$←半⾓⽂字を引数で渡す。
←すべて全⾓にして出⼒【関連項⽬】

han(1)

141

142

143

144

145

146

トランザクションファイル(5)【名前】

トランザクションファイル : トランザクションの性質を満たすフィールド形式(5)のファイル【書式】

第1フィールド 第2フィールド 第3フィールド ......
【説明】

売上データなど随時データの追加などが実施されるタイプのデータはトランザクションと呼ばれている。トラ
ンザクションは短縮してトランと呼ばれることも多い。
ユニケージ開発⼿法では、トランザクションに該当する フィールド形式(5) のファイルを トランザクション
ファイル(5) と呼んでいる。
トランザクションファイル(5) は短縮してトランと呼ばれることがあり、また、Tukubaiコマンドマニュアル
ではtranと表記される。 トランザクションファイル(5) とは対照的にデータ変更のタイミングがあらかじめ定めされており、キーフィールドが重複せずかつ整列されているような フィールド形式(5) のファイルは マスタ
ファイル(5) と呼ばれている。
【例1】

トランザクションファイル(5) の例は次のとおり。
20110405 001 13513543
20110405 002 3403346
20110406 001 3543024
20110406 002 12412311
20110406 003 88797982
20110407 001 1354131
20110407 002 12343423
20110407 003 7657765【関連項⽬】

マスタファイル(5) 、 ネームファイル(5) 、 フィールド形式(5) 、 タグ形式(5) 、 ネーム形式(5)147Contact us: uecinfo@usp-lab.com
Copyright © 2012-2022 Universal Shell Programming Laboratory All Rights Reserved.

148