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 스크립트가 처리할 파일의 실제 이름을 찾고 있기 때문에 작동하지 않으며, 첫 번째 파일을 처리할 때 생성한 배열이 존재하고 이를 비교할 수 있도록 한 번에 두 개의 파일을 처리해야 합니다. 두 파일의 내용입니다.

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)

관련 정보