Чтобы запустить несколько входных файлов за один раз:

Я запускаю скрипт 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

но мы не можем протестировать решение, так как вы не предоставили примерный ввод и ожидаемый вывод.

Другие вопросы по тегам