ファイルがあり、ファイル内の複数のファイル名を探しています。検索テキストの例intl_reg.jcl
。見つけたら、その上に3行のテキストをインポートする必要があります。たとえば、以下はファイルの4行です。 「残高登録された留学生」という説明 前のテキストは常にCHOICEで、その後に説明が続きます。
CHOICE List registered international students with balances
SHORTCUT 8
PROCESS CHDIR /d3/locban/arsys
PROCESS CMD ksh /d3/locban/arsys/intl_reg.jcl
次のようにリストするには、grepコマンドが必要です。
intl_reg.jcl registered international students with balances
ベストアンサー1
使用幸せ(以前のPerl_6)
~$ raku -e 'my @a; for lines() {
if @a.elems == 4 { @a.push($_); @a.shift }
elsif @a.elems < 4 { @a.push($_) };
if .match( /intl_reg\.jcl/ ) and @a.elems == 4 {
say $<>.Str, @a[0].split( /<?after List>/ ).[1] };
};' file
つまり、@a
配列を宣言してlines
コマンドラインから読み込みます。入力は4になるまで配列に追加され、push
最大サイズを4つの要素に維持するために最初の要素が削除されます。@a
elems
shift
配列に4つの要素が含まれていることmatch
が確認されたら、一致する変数(と同じ)を印刷し、3行前に記録された行を印刷して、必要な文字列を適切に返します。and
$<>
$<>
$/
split
入力例:
A CHOICE List registered international students with balances
A SHORTCUT 8
A PROCESS CHDIR /d3/locban/arsys
A PROCESS CMD ksh /d3/locban/arsys/intl_reg.jcl
B CHOICE List registered international students with balances
B SHORTCUT 8
B PROCESS CHDIR /d3/locban/arsys
B PROCESS CMD ksh /d3/locban/arsys/intl_reg.jcl
出力例:
intl_reg.jcl registered international students with balances
intl_reg.jcl registered international students with balances