파일의 모든 줄이 동일한지 확인

파일의 모든 줄이 동일한지 확인

다음 파일의 모든 줄에 동일한 내용이 포함되어 있으면 "동일한 내용"이 인쇄되어야 합니다.

$ cat file
  example-line
  example-line
  example-line

어떤 줄이 다른 줄과 다른 경우 "내용이 다릅니다"가 인쇄되어야 합니다.

예를 들어

$ cat file
  example-line
  somethingelse
  example-line

"내용이 다릅니다"라고 인쇄됩니다.

답변1

사용 uniq:

uniq -c testfile | [ $(wc -l) -eq 1 ] && echo 'contents are the same' || echo 'contents are different'

답변2

간결하고 휴대 가능하며 효율적으로 비교하려면 다음을 수행하면 됩니다.

awk '!seen[$0]++ && NR>1{exit 1}'

예를 들어 출력 메시지를 추가합니다.

$ cat file1
  example-line
  example-line
  example-line

$ cat file2
  example-line
  somethingelse
  example-line

$ awk '!seen[$0]++ && NR>1{f=1; exit} END{print "contents are " (f ? "different" : "same"); exit f}' file1
contents are same
$ echo $?
0

$ awk '!seen[$0]++ && NR>1{f=1; exit} END{print "contents are " (f ? "different" : "same"); exit f}' file2
contents are different
$ echo $?
1

답변3

사용 awk. 키 이름을 배열로 매핑하고 unique, 전체 파일이 처리될 때 배열에는 키가 하나만 있어야 합니다.

awk '!unique[$0]++ { count++ } END { print count == 1 ? "contents are same" : "contents are different"  }' file

의 일반적인 구문은 awk패턴-동작 모델입니다.

pattern { action }

!unique[$0]++전체 행의 내용으로 키를 생성하여 해시 맵(연관 배열)을 생성하는 부분 입니다 $0. 고유한 행이 처음 표시되면 값은 unique['<key-name>']0이 되며 블록은 이 오류를 무효화하고 !카운터를 증가시키는 실제 작업이 됩니다.{..}

또한 값을 사후 증가시키기 때문에 동일한 줄이 연속적으로 발생하는 경우 부정하면 부울 오류 조건이 생성되어 블록이 {..}실행되지 않게 됩니다. END모든 라인이 처리된 후 명령을 실행하십시오. 처리가 끝나면 배열에 키가 하나만 있으므로 이러한 행이 동일하다고 선언합니다.

답변4

아래 awk 솔루션을 사용해 보았는데 훌륭하게 작동합니다.

주문하다

i=`awk '{if (!seen[$0]++){print $0}}' filename| wc -l`



if [[ $i == 1 ]]; then echo "contents are same"; else echo "contents are different"; fi

관련 정보