self
名前
self : 指定したフィールドのデータを取り出す
self = select fields
書式
使い方とオプション
Usage
self f1 f2 ... <file> self -d f1 f2 ... <string>
Option
-n<string> -f
説明
<file> ファイルから、指定したフィールドのデータだけを取り出して出力します。
<file> の指定が無いとき、或は、ファイル名が “-” の時は標準入力を読み込みます。
例その1
テキストデータの第4フィールドと第2フィールドを取り出して出力します。
$ 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 関数と同様な機能ですが、桁数(画面上の表示幅)で開始位置、長さを指定します。
第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
部分文字列指定は画面表示幅の半角文字分を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
行頭、行末に空白がある場合
% cat data2 a b (<- 行頭、行末に空白がある) c d e2 $ self 1/NF data2 a b (<- 行頭、行末の空白が削除されている) c d e
例その7
ダイレクトモードを使用して、文字列を加工することができます。
$ self -d 1.1.4 "20070401 12345" 2007
注意
いくつかの注意があります。
注意その1
入力ファイルが改行文字で終了していない場合、つまり行が尻切れになっている場合は、ファイル末尾に改行文字が追加されて、完結した行になります。
注意その2
数字名のファイルを使用してはいけません。もし “10” という名前のファイルが存在すると、self 1 10 においてファイル名が “10” であるファイルから第1フィールドを選択するという動作をして、標準入力から第1、10フィールドを削除するという動作をしなくなります。ただし、“2” のように数字1文字だけを指定した場合は、そのファイルが存在しても、それは無視して、フィールドとして扱います。
注意その3
部分文字列指定で文字の途中で開始したり、文字の途中となる長さを指定したときはエラーとなります。
$ echo USP 研究所 | self 1.2.4 Error(792)[self] : Rec.1 error.
注意その4
-f オプションを指定すると、エラーとならず、mojicut と同様に直前の文字境界の指定となります。
$ echo USP 研究所 | self -f 1.2.4 US
注意その5
フィールドの幅より大きい開始位置やフィールドの先頭より前を指定してもエラーとなります。
$ 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 _ 研究所
Version and Edition
Version : Tue Jun 18 19:00:37 JST 2019
Edition : 3
© 2021 Universal Shell Programming Laboratory site