Bashの複数のファイル

Bashの複数のファイル

コマンドプロンプトでこのコマンドを実行しています。

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

bashシェルスクリプトでこれを実行したいと思います。次のように試しています。

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

ここで$ diffedRowFromFirstFile | cat $diffedRowFromSecondFile は、ファイル名とフルパスを保持する変数です。

しかし、私のAwkスクリプトが処理するファイルの実際の名前を探しているのでうまくいかず、最初のファイルを処理するときに作成した配列が存在し、それらを比較できるように一度に2つのファイルを処理する必要があります。両方のファイルの内容です。

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にパイプするだけです。

答え1

コマンドの出力をキャプチャgawkし、変数に保存されているファイル名を使用してコマンドを実行するには、次のようにします。

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

あなたの質問では明確ではありませんが、ファイル名自体が変数に指定されたファイルに保存されている場合は、次のものが必要になることがあります。

filename1=$(cat $diffedRowFromFirstFile)
filename2=$(cat $diffedRowFromSecondFile)

関連情報