self: 指定したフィールドのデータを取り出す。
self = select fields
Usage : self f1 f2 ... <file>
self -d f1 f2 ... <string>
Option : -n<string>
: -f
Version : Wed Feb 21 23:21:24 JST 2018
Edition : 3
<file> ファイルから、指定したフィールドのデータだけを取り出して出力します。
<file> の指定が無いとき、或は、ファイル名が "-" の時は標準入力を読み 込みます。
$ cat data
0000000 浜地______ 50 F 91 59 20 76 54
0000001 鈴田______ 50 F 46 39 8 5 21
0000003 杉山______ 26 F 30 50 71 36 30
0000004 白土______ 40 M 58 71 20 10 6
0000005 崎村______ 50 F 82 79 16 21 80
$ self 4 2 data
F 浜地______
F 鈴田______
F 杉山______
M 白土______
F 崎村______
例2
selfはフィールド中の部分を切り出して出力することができます。awkのsubstr関数と同様な機能ですが、桁数(画面上の表示幅) で開始位置、長さを指定します。
$ 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
部分文字指定は画面表示幅の半角文字分を1としています。
$ echo アイウエオカキクケコ | self 1.3.4
ウエオカ開始位置に負数を指定すると、末尾からの位置を指定することが出来ます。
$ cat ken
埼玉県
神奈川県
千葉県
$ self 1.-2 ken
県
県
県
長さに負数を指定すると、フィールド桁数から引いた長さを指定することが出来ます。
$ self 1.1.-2 ken
埼玉
神奈川
千葉
例3
フィールド 0 はレコード全体の指定になります。
$ self 0 data
0000000 浜地______ 50 F 91 59 20 76 54
0000001 鈴田______ 50 F 46 39 8 5 21
0000003 杉山______ 26 F 30 50 71 36 30
0000004 白土______ 40 M 58 71 20 10 6
0000005 崎村______ 50 F 82 79 16 21 80
$ 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 54
0000001 39 21
0000003 50 30
0000004 71 6
0000005 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
入力ファイルが改行文字で終了していない場合、つまり行が尻切れになって
いる場合は、ファイル末尾に改行文字が追加されて、完結した行になります。
数字名のファイルを使用してはいけません。もし "10" という名前のファイ
ルが存在すると、delf 1 10 においてファイル名が "10" であるファイルから
第1フィールドを削除するという動作をして、標準入力ファイルから第1、
10フィールドを削除するという動作をしなくなります。ただし、"2" のよ
うに数字1文字だけを指定した場合は、そのファイルが存在しても、それは
無視して、フィールドとして扱います。
部分文字列指定で文字の途中で開始したり、文字の途中となる長さを指定し たときはエラーとなります。
$ echo USP 研究所 | self 1.2.4
Error(792)[self] : Rec.1 error.
-f オプションを指定すると、エラーとならず、mojicut と同様に直前の文字境界の指定となります。
$ echo USP 研究所 | self -f 1.2.4
US
フィールドの幅より大きい開始位置やフィールドの先頭より前を指定してもエラーとなります。
$ echo USP 研究所 | self 1.20 2
Error(788)[self] : Rec.1 error.
$ echo USP 研究所 | self 1.-20 2
Error(770)[self] : Rec.1 error.
ただし、-n<string> オプションを指定すると、エラーにならず、そのフィールドが <string>
になります。
$ echo USP 研究所 | self -n_ 1.20 2 2
_ 研究所