두 파일의 내용은 다음과 같습니다.
Judi # cat File1
judi /export/home 76
judi /usr 83
judi # cat File2
judi /export/home 79
judi /usr 82
의 세 번째 열 File2
이 의 세 번째 열보다 크면 행을 File1
인쇄합니다.File2
주디/출구/Home79
답변1
awk 'NR==FNR{a[$1$2]=$3;next}$3>a[$1$2]&&a[$1$2]{print $0}' file1 file2
먼저 file1
배열을 읽고 a
배열을 세 번째 열로 채우고 첫 번째와 두 번째 열로 인덱싱합니다. 나중에 의 세 번째 값과 file2
비교하여 a
더 크면 줄 전체가 인쇄됩니다.
답변2
IFS='
'
for line in $(cat file1); do
path=$(echo $line|cut -d' ' -f2)
value1=$(echo $line|cut -d' ' -f3)
value2=$(grep " $path " file2|cut -d' ' -f3)
if [[ "$(echo \"$value2>$value1\"|bc)" == "1" ]]; then
grep " $path " file2;
fi
done
답변3
행의 경우예paste
동일한 순서에 따라 처리하기 전에 파일을 병합하는 더 깔끔한 솔루션이 있습니다 . 이 명령은 paste file1 file2
다음과 같이 합계의 해당 줄을 병합합니다 .file1
file2
$ cat file1
judi /export/home 76
judi /usr 83
$ cat file2
judi /export/home 79
judi /usr 82
$ paste file1 file2
judi /export/home 76 judi /export/home 79
judi /usr 83 judi /usr 82
그런 다음 다음과 같이 파이프라인에서 사용할 수 있습니다 awk
.
$ paste file1 file2 | awk '$6 > $3 {print $4, $5, $6}'
judi /export/home 79
물론 (귀하의 경우와 같이) 행 순서가 다른 경우에는 작동하지 않지만 "awk를 사용하여 두 파일의 열 값 비교"라는 제목 질문에 대답합니다.