2개의 입력 파일이 있습니다.
파일 1의 내용은 ( file1
)입니다.
"BRGTEST-242" a.txt
"BRGTEST-240" a.txt
"BRGTEST-219" e.txt
파일 2의 내용은 ( file2
)입니다.
"BRGTEST-244" a.txt
"BRGTEST-244" b.txt
"BRGTEST-231" c.txt
"BRGTEST-231" d.txt
"BRGTEST-221" e.txt
최종 출력을 ( )로 얻고 싶습니다 file3
.
BRGTEST-244 is depdendent on BRGTEST-242 for file a.txt
BRGTEST-244 is depdendent on BRGTEST-240 for file a.txt
BRGTEST-221 is dependent on BRGTEST-219 for the file e.txt
쉘 스크립트 로직을 작성하는 방법은 무엇입니까? 사용해 보았지만 awk
원하는 결과를 얻을 수 없었습니다.
답변1
다차원 배열을 지원하는 GNU Awk(gawk)를 사용하면 논리는 다음과 같습니다.
gawk '
NR==FNR {
a[$2][++c[$2]] = $1; next
}
$2 in a {
for (i in a[$2])
print $1 " is dependent on " a[$2][i] " for " $2
}
' File1 File2
"BRGTEST-244" is dependent on "BRGTEST-242" for a.txt
"BRGTEST-244" is dependent on "BRGTEST-240" for a.txt
"BRGTEST-221" is dependent on "BRGTEST-219" for e.txt
따옴표도 제거해야 하는 경우:
gawk '
NR==FNR {
a[$2][++c[$2]] = substr($1,2,length($1)-2); next
}
$2 in a {
for (i in a[$2])
print substr($1,2,length($1)-2) " is dependent on " a[$2][i] " for " $2
}
' File1 File2
BRGTEST-244 is dependent on BRGTEST-242 for a.txt
BRGTEST-244 is dependent on BRGTEST-240 for a.txt
BRGTEST-221 is dependent on BRGTEST-219 for e.txt
답변2
이것이 당신이 원하는 것입니다:
#!/bin/bash
while read line1; do
f21=$(echo $line1 | cut -d" " -f1)
f22=$(echo $line1 | cut -d" " -f2)
#echo "outside: $f21 -- $f22"
while read line2; do
f11=$(echo $line2 | cut -d" " -f1)
f12=$(echo $line2 | cut -d" " -f2)
#echo "inside: $f11 -- $f12"
if [ "$f22" == "$f12" ]; then
echo "$f21 is dependent on $f11 for file $f22"
fi
done < file1
done < file2
예
./parsy.bash
"BRGTEST-244" is dependent on "BRGTEST-242" for file a.txt
"BRGTEST-244" is dependent on "BRGTEST-240" for file a.txt
"BRGTEST-221" is dependent on "BRGTEST-219" for file e.txt
어떻게 작동하나요?
echo ...
이 스크립트에는 주석 처리를 제거하여 스크립트가 다른 2개 파일을 어떻게 처리하는지 시각적으로 확인할 수 있는 2개의 명령을 남겼습니다 . 주석을 제거하면 다음과 같은 출력이 표시됩니다.
$ ./parsy.bash | head -10
outside: "BRGTEST-244" -- a.txt
inside: "BRGTEST-242" -- a.txt
"BRGTEST-244" is dependent on "BRGTEST-242" for file a.txt
inside: "BRGTEST-240" -- a.txt
"BRGTEST-244" is dependent on "BRGTEST-240" for file a.txt
inside: "BRGTEST-219" -- e.txt
outside: "BRGTEST-244" -- b.txt
inside: "BRGTEST-242" -- a.txt
inside: "BRGTEST-240" -- a.txt
inside: "BRGTEST-219" -- e.txt
이를 수행하는 핵심은 반복해야 할 내용을 인식 file2
하고 기준에 따라 각 요소가 해당 내용과 일치하는지 확인하는 것입니다 file1
. 이렇게 하려면 다른 루프 안에 루프를 중첩해야 합니다.
이 구조와 이에 따라 데이터가 구문 분석되면 간단한 명령문을 사용하여 if
두 번째 열이 일치하는지 확인할 수 있으며, 그렇다면 수집한 조각을 사용하여 메시지를 보냅니다.file1
file2
echo