gawk на нескольких файлах в bash

Я запускаю эту команду в командной строке

gawk -f comparefirstandsecond.awk First.out Second.out

Я хочу сделать это в сценарии оболочки bash и пытаюсь сделать это так:

compareAwkOut=$(cat  $diffedRowFromFirstFile | cat $diffedRowFromSecondFile | gawk -f $COMPARE_AWK_SCRIPT)

Где $diffedRowFromFirstFile | cat $diffedRowFromSecondFile - переменные, содержащие имя файла с полным путем.

Но это не работает, так как мой Awk скрипт ищет фактические имена файлов для обработки, и ему нужно обработать оба файла за один раз, чтобы массив, который я создаю при обработке первого файла, существовал, и я мог сравнить его с содержимым второго файла.

comparefirstandsecond.awk выглядит так:

BEGIN {
  FS=","
}

FILENAME~/^First.out$/ && /^[0-9a-zA-Z]*^^/,/^$/ {
  if ( FILENAME~/Second.out/){
        print "Second.out comes in here as well WHY ? it should not ... "
  }else
    {
        print FILENAME;
        for (i=1;i<=NF;i++) {  
         firstValues[i]=$i
        }
    }
}

FILENAME~/^Second.out$/ && /^[0-9a-zA-Z]*^^/,/^$/ {
  print FILENAME;
  #First.out does not come as it is already processed above
  for (j=1;j<=NF;j++) {
    secondValues[j]=$j
  }

}
END {
  printf "END\n";
  #done something with both arrays for each values like 
  #  for (x in firstValues) {
#    printf("On count %s First  %s and Second %s \n",x,firstValues[x],secondValues[x])
    #if (firstValues[x]!=secondValues[x]) { }
}
}

Если я их катирую, то имена файлов теряются, я думаю. Это просто данные, переданные в gawk, собранные вместе из обоих файлов.

0
23.03.2017, 10:09
1 ответ

Чтобы перехватить вывод команды gawk и запустить команду с именами файлов, сохраненными в переменных, вам просто нужно сделать следующее:

compareAwkOut=$(gawk -f $COMPARE_AWK_SCRIPT $filename1 $filename2)

Из вашего вопроса было неясно, но если имена файлов хранятся в файле с именем в переменных, это может быть то, что вам нужно:

filename1=$(cat $diffedRowFromFirstFile)
filename2=$(cat $diffedRowFromSecondFile)
0
28.01.2020, 04:47

Теги

Похожие вопросы