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.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
그리고 해야 해