별도의 CSV를 기반으로 파일에서 행 추출

별도의 CSV를 기반으로 파일에서 행 추출

var.txt두 개의 파일 이 있고 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

지정된 요청 번호( 의 두 번째 필드)에 대해 var.txt판매 번호(세 번째 열, 위치 50-56)와 항목 번호(네 번째 열, 위치 72-79)를 일치시켜RTCCVB01 해당 행을 찾고 res.dat모두 추출해야 합니다. 거기에서 까지의 줄 VBPCVB01.

예를 들어 요청 번호가 이면 1다음 줄이 적용됩니다 var.txt.

20171015,1,123456,216
20171015,1,123456,217

res.dat123456따라서 판매 번호와 품목 번호 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

VBPCVB01res.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

그리고 해야 해

관련 정보