키 값을 기준으로 두 파일을 비교하고 파일 1에 일치하지 않는 레코드를 인쇄하고 싶습니다. 사용된 구분 기호는 파이프입니다.|
- 출력은 다음과 같습니다
I|234567|BCDE|234TFY|abc|12345
- 파일 1:
주요 열: 열 2 및 열 5I|123456|ABCD|123abc|xyz|23456 I|234567|BCDE|234TFY|abc|12345
- 파일 2:
주요 열: 열 1 및 열 4xyz|P|1001|123456 bcd|P|1001|123467
누구든지 올바른 접근 방식이 무엇인지 제안할 수 있습니까 awk
?
답변1
이 작업을 수행하려면 다음 프로그램을 사용할 수 있습니다 awk
.
awk -F'|' 'FNR==NR{key1[FNR]=$1;key2[FNR]=$4;next}
{if ($2!=key2[FNR] || $5!=key1[FNR]) print}' file2.txt file1.txt
- 먼저
file2.txt
각 행의 열 1과 4 목록을 구문 분석하고 작성합니다. 파일FNR
별 라인 카운터가NR
글로벌 라인 카운터(하지만 참고하세요비어 있으면 파괴됩니다file2.txt
! ). - 그런 다음 구문 분석할 때
file1.txt
각 행에 대해 열 2와 5를 처리하는 동안 채워진 목록과 비교하고file2.txt
일치하지 않으면 행을 인쇄합니다.
답변2
다음과 같이 시도해 볼 수 있습니다.
while read -r line;
do
myvar2=$(line | awk '{ print $2}')
if grep -Fxq "$myvar" file2
then
# code if found
else
# code if not found
fi
myvar5=$(line | awk '{ print $5}')
if grep -Fxq "$myvar5" file2
then
# code if found
else
# code if not found
fi
done < file1
코드는 테스트되지 않았습니다. 이는 file1에서 한 줄씩 읽어야 하며, 열2로 구분되고, 열5로 구분되어야 awk '{ print $2 $5}'
하며, 2와 5를 읽고 myvar가 file2에 있는지 확인해야 합니다.