var.txt
2つのファイルがありますres.dat
。
はいvar.txt
date,request,sales,item
20171015,1,123456,216
20171015,1,123456,217
20171015,2,123456,214
20171015,2,345678,213
20171015,2,345678,214
20171015,3,456789,218
20171015,3,345678,217
20171015,4,567890,212
はいres.dat
RTCCVB01 213456 123456 216
.
.
.
VBPCVB01
RTCCVB01 213456 345678 214
.
.
.
VBPCVB01
RTCCVB01 213456 123456 214
.
.
.
VBPCVB01
RTCCVB01 213456 345678 213
.
.
.
VBPCVB01
RTCCVB01 213456 123456 217
.
.
.
VBPCVB01
RTCCVB01 213456 345678 217
.
.
.
VBPCVB01
RTCCVB01 213456 456789 218
.
.
.
VBPCVB01
RTCCVB01 213456 567890 212
.
.
.
VBPCVB01
指定された要求番号(の2番目のフィールド)に対して、var.txt
販売番号(3番目の列、場所50-56)とアイテム番号(4番目の列、場所72-79)を一致させて、そのRTCCVB01
行を見つけてres.dat
すべて抽出する必要があります。そこからの行VBPCVB01
。
たとえば、要求番号がある場合は、次の行が1
適用されますvar.txt
。
20171015,1,123456,216
20171015,1,123456,217
res.dat
123456
したがって、販売番号と品目番号、216
または次の項目の項目が必要です217
。
RTCCVB01 213456 123456 216
.
.
.
VBPCVB01
RTCCVB01 213456 123456 217
.
.
.
VBPCVB01
リクエスト2の場合は次のようになります。
RTCCVB01 213456 123456 214
.
.
.
VBPCVB01
RTCCVB01 213456 345678 213
.
.
.
VBPCVB01
RTCCVB01 213456 345678 214
.
.
.
VBPCVB01
要件3:
RTCCVB01 213456 456789 218
.
.
.
VBPCVB01
RTCCVB01 213456 345678 217
.
.
.
VBPCVB01
要件4:
RTCCVB01 213456 567890 212
.
.
.
VBPCVB01
1.dat
この場合は、各結果を別々のファイルに保存する必要があります。全体を処理し、4.dat
各固有の要求番号var.txt
から行を抽出し、datファイルを生成するにはどうすればよいですか?res.dat
答え1
VBPCVB01
res.datを解析し、var.txtの販売+アイテムの組み合わせから要求に応じてファイルを閉じるまで、各セクションを作成するスクリプトが必要です。このスクリプトは次のとおりですscript.sh
。
sed "
/RTCCVB01.*123456.*216/,/VBPCVB01/w 1.dat
/RTCCVB01.*123456.*217/,/VBPCVB01/w 1.dat
/RTCCVB01.*123456.*214/,/VBPCVB01/w 2.dat
/RTCCVB01.*345678.*213/,/VBPCVB01/w 2.dat
/RTCCVB01.*345678.*214/,/VBPCVB01/w 2.dat
/RTCCVB01.*456789.*218/,/VBPCVB01/w 3.dat
/RTCCVB01.*345678.*217/,/VBPCVB01/w 3.dat
/RTCCVB01.*567890.*212/,/VBPCVB01/w 4.dat
d;" res.dat
このスクリプトは私が書いたものではなく、自分で書いたものですsed
。
sed -E 's/date.*/sed "/;s_.*,(.*),(.*),(.*)_/RTCCVB01.*\2.*\3/,/VBPCVB01/w \1.dat_;${h;s/.*/d;" res.dat/;x;G}' var.txt > script.sh
このスクリプトは、次のように呼び出すことができるsed
スクリプトで書かれています。script.sh
/bin/sh script.sh
そしてしなければなりません