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
그러니까 그런 조건에서
- 고양이 두 파일
- 정렬 N 고유
- 결과의 행 수를 계산합니다.
두 파일의 줄 수와 동일한 수를 얻으면 성공한 것입니다.
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가 됩니다).