我有两个文件,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
.如何编写一个 shell 脚本来处理整个、从每个唯一请求号var.txt
中提取行并创建 dat 文件?res.dat
答案1
您需要一个脚本来解析 res.dat 并编写每个部分,从 var.txt 中的 sales+item-combination 到VBPCVB01
给定请求的文件中的结束语。这个脚本就像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
并且应该做