명령 프롬프트에서 이 명령을 실행하고 있습니다.
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)