xfmt : V1.3=(W)= ファイル行フォーマッティング。
形式 :xfmt [/options] filename [fieldspec ...]
options :
/D"delms" :追加の入力ファイルフィールド分離文字。
省略値は" \t"(スペースとタブ)。
/L[n]x[str]:行選択文字列指定。n:カラム(行頭が 1)。x:S/E/I/X。
S:この文字列を含む行から抽出開始。
E:この文字列を含む行で抽出終了。
I:(Include)この文字列を含む行は抽出。
X:(eXclude)この文字列を含む行は抽出しない。
+:前の 条件の AND 連結条件。
I と X は指定された順にチェックされる。
最初が X なら全行抽出、最初が I なら全行非選択が仮定される。
例) /L8S"12:00:00" /L8E"13:00:00"
(8桁目が"12:00:00"の行から
8桁目が"13:00:00"までを抽出する)
/LX"Normal" /L20I"Overridden"
(1桁目が"Normal"で20桁目が"Overridden"でない行は
選択しない)
/L5I"RC" /L9+"Ok"
(5桁目が"RC"で9桁目が"Ok"のを抽出)
/Ooutfile :出力ファイル名。省略値は標準出力。
/Q[s][d] :引用符の考慮。引用符内の分離文字は無視。
s:一重引用符、d:二重引用符。/Q のみは両方考慮。
/Rnn :改行文字を持たないファイルにnnバイトごとに改行文字を挿入。
/S[R]"seps":出力用フィールド分離挿入文字列。省略値は" "(1桁スペース)。
R:入力ファイルの分離文字は残さずにこの指定文字列で置換する。
/Xoutfile2 :選択されなかった行の出力先ファイル名。省略値は出力なし。
/Yx,/Nx :その他のフラグオプション。
Na:フィールド整列をしない。Ys 指定がなければコピー出力。
Ys 指定があればスペース圧縮出力。
Nc:出力ファイル上書きのとき確認Msgを出さない。
Ys:fieldspec指定のフィールドだけを出力する。
fieldspec: fieldno[-fieldno]][O][R|L|P][N|A][C][:col-spec]
col-spec: [X]{start-substr|[-]cols}[:{end-substr|[-]cols|Llength}]
start/end-substr: [T|E][-]{A|B}fldstr
filedno:分離文字(省略値はスペースとタブ)によるフィールド番号。max=99。
O :このフィールド番号以降は1フィールドとみなす。
R :右詰整列。/Na指定がないときの省略値
L :左詰整列。
P :小数点をあわせて右詰整列。
N :数値フィールドを探してそこで右詰整列。
A :N と C の効果を後続フィールドに対し一旦リセットする。
C :以降の全フィールドのその間のスペースを1スペースに圧縮。
Nと一緒に指定すると数値フィールドが見つかるまでを圧縮。
例) l 5r (第5項以外は左寄せ)
1-5p (第1項から第5項まで小数点数値には"P"を適用)
r l 4c (右,左,左 第4項以降はすべて圧縮して左詰)
X :部分文字列を削除の意味。
T|E :fldstrを含まない行の部分文字列開始/終了位置、T:行頭,E:行末。
開始文字列指定では省略値は X指定(文字列削除)の場合 "e"、
以外は "t"。終了文字列指定では Xに関係なく"e"。
[-]A|B :開始/終了位置はfldstr指定の文字列の後(A)か前(B)かを指定。
"-" はfldstr文字列を後ろから探す。
fldstr :部分文字列取出し開始/終了位置を決めるための文字列。
":"を含む時は1重引用符(')で囲む。
例) 3:xb"time out"
(第3項が"time out"を含むならその前を削除)
4:a'Time:':bElapsed
("Time"の後から"Elapsed"の前まで取り出す)
[-]cols:入力フィールド部分文字列開始/終了位置."-"は後からの位置。
例) 3:3:5 (第3項からは 3-5 桁を取り出す)
6:x-5:-2 (第6項からは 後ろから 5桁目から2桁目を取り除く)
Llength:部分文字列の長さ。指定なしは項末まで。
例) 3:3:L5 (第3項からは 3桁目から5 桁を取り出す)
(注) Pタイプの場合の桁位置は整列後のイメージを想定すること。
fieldspec指定がないと/Ys,/Na指定がなければ全フィールドを右詰で出力。
フィールド番号なしの整列指定オプションはその指定位置に対応する
フィールド以降の全フィールドに適用される。
例) xfmt /L5S"10:00:00" /L5E"11:59:59" /LIexcept /LXNullPo file1 r 5l
xfmt /Q /S"," /Na /Ys file2 5:x4 6:-3:L2 1 3:t-a?:4 7:b"x y":a"x z"
xfmt file3 nc:999:l1
以下は実行例です。
**********************************************************************
14:39:09 ===>> cat inp1
2005/01/22 10:19 <DIR> .
2005/01/22 10:19 <DIR> ..
2007/05/18 17:23 80 @
2000/07/08 18:08 1,302 @0
2001/09/08 08:38 22,440 @1
2001/09/08 08:38 22,440 @2
2000/07/08 09:47 80 @3
2000/07/23 06:51 8,661 @@
2000/07/08 19:36 1,410 @@0
2001/08/30 12:55 521 @@1
(*** fields alignment-1:: l:次の指定項までは左寄せ, 3:項番号, r:次の指定項(最後)まで右寄せ***)
14:39:44 ===>> xfmt inp1 l 3r
2005/01/22 10:19 <DIR> .
2005/01/22 10:19 <DIR> ..
2007/05/18 17:23 80 @
2000/07/08 18:08 1,302 @0
2001/09/08 08:38 22,440 @1
2001/09/08 08:38 22,440 @2
2000/07/08 09:47 80 @3
2000/07/23 06:51 8,661 @@
2000/07/08 19:36 1,410 @@0
2001/08/30 12:55 521 @@1
xfmt:V1.1(W): *** Done *** inp1 --> stdout , null ***
read:10, write:10, excluded:0, short-line:0
(*** fields alignment-2::***)
14:40:29 ===>> xfmt inp1 l 3r 4r
2005/01/22 10:19 <DIR> .
2005/01/22 10:19 <DIR> ..
2007/05/18 17:23 80 @
2000/07/08 18:08 1,302 @0
2001/09/08 08:38 22,440 @1
2001/09/08 08:38 22,440 @2
2000/07/08 09:47 80 @3
2000/07/23 06:51 8,661 @@
2000/07/08 19:36 1,410 @@0
2001/08/30 12:55 521 @@1
xfmt:V1.1(W): *** Done *** inp1 --> stdout , null ***
read:10, write:10, excluded:0, short-line:0
**********************************************************************
14:58:04 ===>> cat inp2
2005/01/22 10:19 <DIR> .
2005/01/22 10:19 <DIR> ..
2007/05/18 17:23 80 @
2000/07/08 18:08 1.302 @0
2001/09/08 08:38 22.440 @1
2001/09/08 08:38 22.440 @2
2000/07/08 09:47 80 @3
2000/07/23 06:51 8.661 @@
2000/07/08 19:36 1.410 @@0
2001/08/30 12:55 521 @@1
(*** fields alignment-3:: p:小数点で位置取り(全項) ***)
14:58:23 ===>> xfmt inp2 p
2005/01/22 10:19 <DIR> .
2005/01/22 10:19 <DIR> ..
2007/05/18 17:23 80 @
2000/07/08 18:08 1.302 @0
2001/09/08 08:38 22.440 @1
2001/09/08 08:38 22.440 @2
2000/07/08 09:47 80 @3
2000/07/23 06:51 8.661 @@
2000/07/08 19:36 1.410 @@0
2001/08/30 12:55 521 @@1
xfmt:V1.1(W): *** Done *** inp2 --> stdout , null ***
read:10, write:10, excluded:0, short-line:0
**********************************************************************
15:04:27 ===>> cat inp3
2005/01/22 10:19 <DIR> .
2005/01/22 10:19 <DIR> ..
2007/05/18 17:23 1 a 80 @
2000/07/08 18:08 2 a 1.302 @0
2001/09/08 A08:38 2 a 22.440 @1
2001/09/08 08:38 4 a 22.440 @2
2000/07/08 09:47B 5 a 80 @3
2000/07/23 06:51 99 a 8.661 @@
2000/07/08 19:36 9 a 1.410 @@0
2001/08/30 12:55 999 a 521 @@1
(*** fields alignment-4:: n:数値項のみ整列(数値以外の部分はまとめて1項扱い) ***)
15:05:13 ===>> xfmt inp3 n
2005/01/22 10:19 <DIR> .
2005/01/22 10:19 <DIR> ..
2007/05/18 17:23 1 a 80 @
2000/07/08 18:08 2 a 1.302 @0
2001/09/08 A08:38 2 a 22.440 @1
2001/09/08 08:38 4 a 22.440 @2
2000/07/08 09:47B 5 a 80 @3
2000/07/23 06:51 99 a 8.661 @@
2000/07/08 19:36 9 a 1.410 @@0
2001/08/30 12:55 999 a 521 @@1
xfmt:V1.1(W): *** Done *** inp3 --> stdout , null ***
read:10, write:10, excluded:0, short-line:0
(*** fields alignment-5:: c:連続スペースは1スペースに圧縮***)
15:06:22 ===>> xfmt inp3 3c
2005/01/22 10:19 <DIR>
2005/01/22 10:19 <DIR> .
2007/05/18 17:23 1 a 80
2000/07/08 18:08 2 a 1.302 @
2001/09/08 A08:38 2 a 22.440 @
2001/09/08 08:38 4 a 22.440 @
2000/07/08 09:47B 5 a 80 @
2000/07/23 06:51 99 a 8.661 @
2000/07/08 19:36 9 a 1.410 @@
2001/08/30 12:55 999 a 521 @@
xfmt:V1.1(W): *** Done *** inp3 --> stdout , null ***
read:10, write:10, excluded:0, short-line:0
(*** 項の選択:: -Ys:指定の項のみを選択出力***)
16:08:28 ===>> xfmt inp3 /ys 2 3 5
10:19 <DIR>
10:19 <DIR>
17:23 1 80
18:08 2 1.302
A08:38 2 22.440
08:38 4 22.440
09:47B 5 80
06:51 99 8.661
19:36 9 1.410
12:55 999 521
xfmt:V1.1(W): *** Done *** inp3 --> stdout , null ***
read:10, write:10, excluded:0, short-line:2
**********************************************************************
16:50:30 ===>> cat inp4
NAME=angel AGE:60 f Addr-Stockholm
NAME=sky AGE:60 m Addr-Tokyo
NAME=erth AGE:600 f Addr-LosAngels
NAME=moon AGE:6000 m Addr-another world
(*** 文字列削除 :: 1l:第1項 左寄せ, a: "NAME="を含んでいればその後(After)を取り出す ***)
( 4l:a"Addr-" 第4項は"After-" を含んでいる場合はその後ろを取り出し左寄せ ***)
16:50:35 ===>> xfmt inp4 r 1l:a"NAME=" 4l:a"Addr-"
angel AGE:60 f Stockholm
sky AGE:60 m Tokyo
erth AGE:600 f LosAngels
moon AGE:6000 m another world
xfmt:V1.1(W): *** Done *** inp4 --> stdout , null ***
read:4, write:4, excluded:0, short-line:0
(*** 文字列削除 :: 4l:a"-" :第4項は "-" の後ろを取り出す ***)
23:13:10 ===>> xfmt x2 4l:a"-"
NAME=angel AGE:60 f Stockholm
NAME=sky AGE:60 m Tokyo
NAME=erth AGE:600 f LosAngels
NAME=moon AGE:6000 m another world
xfmt:V1.1(W): *** Done *** x2 --> stdout , null ***
read:4, write:4, excluded:0, short-line:0
(*** 文字列削除 :: 4l:xa"-" :第4項は"-"を含めばその後を削除する ***)
23:13:29 ===>> xfmt x2 4l:xa"-"
NAME=angel AGE:60 f Addr-
NAME=sky AGE:60 m Addr-
NAME=erth AGE:600 f Addr-
NAME=moon AGE:6000 m Addr- world
xfmt:V1.1(W): *** Done *** x2 --> stdout , null ***
read:4, write:4, excluded:0, short-line:0
(*** スペース以外の分離文字:: /d"=-" 項間分離文字は "=" と "-" と " " ***)
17:01:24 ===>> xfmt inp4 /d"=-"
NAME= angel AGE:60 f Addr- Stockholm
NAME= sky AGE:60 m Addr- Tokyo
NAME= erth AGE:600 f Addr- LosAngels
NAME= moon AGE:6000 m Addr- another world
xfmt:V1.1(W): *** Done *** inp4 --> stdout , null ***
read:4, write:4, excluded:0, short-line:0
(*** 分離文字の置き換え:: /SR":": 分離文字 "=" と "-" を ":" に置き換えて出力***)
17:01:38 ===>> xfmt inp4 /d"=-" /SR":"
NAME: angel AGE:60 f Addr: Stockholm
NAME: sky AGE:60 m Addr: Tokyo
NAME: erth AGE:600 f Addr: LosAngels
NAME:moon AGE:6000 m Addr:another world
xfmt:V1.1(W): *** Done *** inp4 --> stdout , null ***
read:4, write:4, excluded:0, short-line:0
(*** 分離文字の置き換え:: /SR":": 分離文字 "=" と "-" を " " に置き換えて出力***)
17:02:10 ===>> xfmt inp4 /d"=-" /SR" "
NAME angel AGE:60 f Addr Stockholm
NAME sky AGE:60 m Addr Tokyo
NAME erth AGE:600 f Addr LosAngels
NAME moon AGE:6000 m Addr another world
xfmt:V1.1(W): *** Done *** inp4 --> stdout , null ***
read:4, write:4, excluded:0, short-line:0
(*** 行選択:: /lsangel: "angel"を含む行から抽出開始 ***)
( /leLos : "Los" を含む行で抽出終了 ***)
17:04:36 ===>> xfmt inp4 /lsangel /leLos
NAME=angel AGE:60 f Addr-Stockholm
NAME=sky AGE:60 m Addr-Tokyo
NAME=erth AGE:600 f Addr-LosAngels
xfmt:V1.1(W): *** Done *** inp4 --> stdout , null ***
read:4, write:3, excluded:1, short-line:0
(*** 行選択:: /lxsky : "sky" を含む行は出力しない***)
17:05:43 ===>> xfmt inp4 /lsangel /leLos /lxsky
NAME=angel AGE:60 f Addr-Stockholm
NAME=erth AGE:600 f Addr-LosAngels
xfmt:V1.1(W): *** Done *** inp4 --> stdout , null ***
read:4, write:2, excluded:2, short-line:0
(*** 行選択:: /lxm : "m" を含む行は出力しない***)
17:09:31 ===>> xfmt inp4 /lxm
NAME=erth AGE:600 f Addr-LosAngels
xfmt:V1.1(W): *** Done *** inp4 --> stdout , null ***
read:4, write:1, excluded:3, short-line:0
**********************************************************************
16:57:24 ===>> cat inp5
'NAME angel' AGE:60 f Addr Stockholm 1
'NAME sky' AGE:60 m Addr Tokyo 2
'NAME erth' AGE:600 f Addr "Los Angels" 3
'NAME moon' AGE:6000 m Addr "another world" 4
(*** 引用符の指定 :: 省略値では引用符は考慮されない ***)
16:57:28 ===>> xfmt inp5 l
'NAME angel' AGE:60 f Addr Stockholm 1
'NAME sky' AGE:60 m Addr Tokyo 2
'NAME erth' AGE:600 f Addr "Los Angels" 3
'NAME moon' AGE:6000 m Addr "another world" 4
xfmt:V1.1(W): *** Done *** inp5 --> stdout , null ***
read:4, write:4, excluded:0, short-line:0
(*** 引用符の指定 :: /q: /q のみでは1重・2重引用符とも考慮する ***)
16:57:37 ===>> xfmt inp5 l /q
'NAME angel' AGE:60 f Addr Stockholm 1
'NAME sky' AGE:60 m Addr Tokyo 2
'NAME erth' AGE:600 f Addr "Los Angels" 3
'NAME moon' AGE:6000 m Addr "another world" 4
xfmt:V1.1(W): *** Done *** inp5 --> stdout , null ***
read:4, write:4, excluded:0, short-line:0