두 파일의 첫 번째 열을 비교하고 문자열이 일치하면 "true"를 인쇄하는 방법 [중복]

두 파일의 첫 번째 열을 비교하고 문자열이 일치하면 "true"를 인쇄하는 방법 [중복]

file1과 file2라는 두 개의 파일이 있습니다.

file1:

91 | 2018-10-11 16:07:14 | bkwdv | 188.0000 |
77 | 2018-10-12 15:05:15 | wvwef | 94.0000  | 

file2:

77 | 2018-10-12 15:05:15 | wvwef | 94.0000  
91 | 2018-10-11 16:07:14 | bkwdv | 188.0000 

file1의 첫 번째 열과 file2의 첫 번째 열을 비교하고 싶습니다.

문자열이 일치하면(입력 데이터에 따라 순서에 관계없이) "성공"을 인쇄하고, 그렇지 않으면 "종료"를 인쇄해야 합니다. 따라서 주어진 입력 데이터를 기반으로 "성공"을 인쇄해야 합니다.

첫 번째 열의 행 수는 두 파일에서 다를 수 있으므로 이 경우 종료해야 합니다.

답변1

각 파일에서 첫 번째 열을 추출하고 숫자로 정렬한 후 비교합니다.

awk '{ print $1 }' <file1 | sort -n >file1.col1
awk '{ print $1 }' <file2 | sort -n >file2.col1

if cmp -s file1.col1 file2.col1; then
    echo 'success'
else
    echo 'exit'
fi

rm file1.col1 file2.col1

또는 bash특정 구문을 사용하십시오.

if cmp -s <( awk '{ print $1 }' <file1 | sort -n ) \
          <( awk '{ print $1 }' <file2 | sort -n )
then
    echo 'success'
else
    echo 'exit'
fi

cmp -s명령은 아무것도 출력하지 않지만 두 파일 피연산자의 내용이 동일한 경우 성공적으로 종료됩니다. if두 파일의 정렬된 첫 번째 열이 동일한지 확인하기 위해 명령문에서 이를 사용합니다 .

awk '{ print $1 }'cut -d ' ' -f 1첫 번째 열의 숫자 뒤의 공백 문자가 공백 문자인 경우 위 코드의 내용도 공백 문자로 바꿀 수 있습니다.

답변2

귀하의 질문에 대한 제 답변과 유사합니다여기

#!/bin/bash
var=$(cut -d"|" -f 1 file  | sort -k1.1n)
var1=$(cut -d"|" -f 1 file | sort -k1.1n)

if [ "$var" == "$var1" ]
then
  echo "success"
else
  exit
fi

설명하다

답변3

검사를 사용하여 파일에서 페어링할 수 없는 줄을 정렬 join하고 결과가 빈 문자열인지 테스트할 수 있습니다.

[[ -z "$(join -t '|' -v1 -v2 <(sort file1) <(sort file2))" ]] && echo "success" || echo "exit"

답변4

그러니까 그런 조건에서

  1. 고양이 두 파일
  2. 정렬 N 고유
  3. 결과의 행 수를 계산합니다.

두 파일의 줄 수와 동일한 수를 얻으면 성공한 것입니다.

N1=$(cat file1 |wc -l) ;N2=$(cat file2 |wc -l); N3=$(cat file1 file2 |sort -nu |wc -l); echo $N1 $N2 $N3

성공 / 종료 결과를 얻으려면 N1, N2, N3을 직접 비교해야 합니다. 물론 N3 결과 수집을 시작하기 전에 N1과 N2를 비교하고, 같으면 계속해서 N1과 N3만 비교하는 것이 좋습니다(N3 계산을 시작하므로 N1==N2가 됩니다).

관련 정보