Чтобы запустить несколько входных файлов за один раз:
Я запускаю скрипт bash, чтобы найти диапазон от Master.txt до File22_Jun14.txt
sh FindRange.sh
#!/bin/sh
gawk 'BEGIN {
FS="," # Field separator
c=1 # counter
while ((getline line < ARGV[1]) > 0) {
if (line !~ "Start,End,Qty,Date") { # No need for header
F[c]=line; # store line
split(line,a,",") # split line
F2[c]=a[1] ; F3[c]=a[2] # store the lines range parts
c++
}
}
}
FILENAME==ARGV[2] {
# Work on second file
for (i in F) { # For every line scan the first file
# if within a range, step out
if ($1>=F2[i] && $1<=F3[i]) {found=i ; break}
# else check next
else {found=0}
}
# if the above found anything print the line from second file
# with the relavant line from the first
if (found>0) {
print $0 "," F[found]
}
# otherwise the not found message
else {
print $0 ",NotFound,NotFound,NotFound,NotFound"
}
}' Master.txt File22_Jun14_0000.txt >Op_File33_Jun14.txt
Имея несколько входных файлов, как показано ниже (File22_Jun14_.txt), я изменяю имя входных файлов вручную по одному и запускаю приведенный выше скрипт. Есть ли какая-либо возможность запустить все файлы File22_Jun14_*. Txt за один раз?
File22_Jun14_0000.txt
File22_Jun14_0001.txt
File22_Jun14_0002.txt
File22_Jun14_0003.txt
File22_Jun14_0004.txt
File22_Jun14_0005.txt
File22_Jun14_0006.txt
File22_Jun14_0007.txt
File22_Jun14_0008.txt
File22_Jun14_0009.txt
File22_Jun14_0010.txt
Пытался как, sh FindRange.sh Master.txt File22_Jun14_*.txt >Op_File33_Jun14.txt
и это не работает так, как ожидается, любые предложения...
Редактировать: проверка первого поля из файла File22_Jun14_0000.txt, лежащего в пределах диапазона Master.txt - начальный и конечный диапазоны, если да, тогда необходимо заполнить все строки из File22_Jun14_0000.txt и соответствующий диапазон из Master.txt, иначе NotFound
Master.txt
StartRange,EndRange,Qty,Date
11,110,100,26.05.14
6001,10000,4000,03.05.14
501,805,305,03.05.14
File22_Jun14_0000.txt
11,abc,22-JUN-12.08:06:03,22-JUN-12.08:06:03,19-Apr-16,1,INR,RO0412,RC03,L7,,31
12,abc,22-JUN-12.08:06:03,22-JUN-12.08:06:03,19-Apr-16,1,INR,RO0412,RC03,L7,,31
905,abc,22-JUN-12.08:06:03,22-JUN-12.08:06:03,19-Apr-16,1,INR,RO0412,RC03,L7,,31
906,abc,30-JUN-12.01:06:49,30-JUN-12.01:06:49,19-Apr-16,1,INR,RO0412,RC03,L7,,29
28,abc,30-JUN-12.01:06:49,30-JUN-12.01:06:49,19-Apr-16,1,INR,RO0412,RC03,L7,,29
100001,def,29-MAY-13.12:05:11,29-MAY-13.12:05:11,15-Feb-17,1350,INR,RO0213,CD,K1,,30
100002,def,29-MAY-13.12:05:11,29-MAY-13.12:05:11,15-Feb-17,1350,INR,RO0213,CD,K1,,30
Желаемый результат:
11,abc,22-JUN-12.08:06:03,22-JUN-12.08:06:03,19-Apr-16,1,INR,RO0412,RC03,L7,,31,11,110,100,26.05.14
12,abc,22-JUN-12.08:06:03,22-JUN-12.08:06:03,19-Apr-16,1,INR,RO0412,RC03,L7,,31,11,110,100,26.05.14
905,abc,22-JUN-12.08:06:03,22-JUN-12.08:06:03,19-Apr-16,1,INR,RO0412,RC03,L7,,31,NotFound,NotFound,NotFound,NotFound
906,abc,30-JUN-12.01:06:49,30-JUN-12.01:06:49,19-Apr-16,1,INR,RO0412,RC03,L7,,29,NotFound,NotFound,NotFound,NotFound
28,abc,30-JUN-12.01:06:49,30-JUN-12.01:06:49,19-Apr-16,1,INR,RO0412,RC03,L7,,29,11,110,100,26.05.14
506,def,29-MAY-13.12:05:11,29-MAY-13.12:05:11,15-Feb-17,1350,INR,RO0213,CD,K1,,30,501,805,305,03.05.14
100002,def,29-MAY-13.12:05:11,29-MAY-13.12:05:11,15-Feb-17,1350,INR,RO0213,CD,K1,,30,NotFound,NotFound,NotFound,NotFound
1 ответ
Лучше всего я могу сказать, что ваш сценарий должен быть:
awk '
BEGIN{ FS="," }
NR==FNR { F[NR]=$0; F2[NR]=$1; F3[NR]=$2; next }
{
do whatever you do today inside that FILENAME block
}
' Master.txt File22_Jun14_*.txt > Op_File33_Jun14.txt
но мы не можем протестировать решение, так как вы не предоставили примерный ввод и ожидаемый вывод.