awk를 사용하여 두 파일의 열 값을 비교합니다.

awk를 사용하여 두 파일의 열 값을 비교합니다.

두 파일의 내용은 다음과 같습니다.

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다음과 같이 합계의 해당 줄을 병합합니다 .file1file2

$ 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를 사용하여 두 파일의 열 값 비교"라는 제목 질문에 대답합니다.

관련 정보