基于单独的 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.dat所以我需要来自销售编号123456和商品编号的条目216217

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

并且应该做

相关内容