다양한 인코딩의 문자열 비교

다양한 인코딩의 문자열 비교

UTF8로 인코딩된 파일의 문자열을 비교하려고 합니다.

file /dev/eeprom: UTF-8 Unicode text, with very long lines

일련번호가 스크립트에 하드코딩되어 있습니다. 콘솔에 인쇄할 때 문자열은 잘 표시되지만 파일 형식에 문제가 있는 것 같습니다(iconv는 사용할 수 없음). 파일 출력이 올바른 경우 스크립트는 ASCII 텍스트 실행 파일입니다.

#!/bin/sh
eeprom_id=$(cat /dev/eeprom | grep -e ID: | awk '{split($0,a,":"); print a[2]}')
echo "EEPROM_ID: $eeprom_id"

if [ $eeprom_id == "C000139-102" ]
then
    echo "String identical"
else
    echo "WRONG"
fi

산출:

.script.sh
EEPROM_ID: C000139-102
WRONG

이 문자열을 올바르게 비교하는 방법에 대한 아이디어가 있습니까?

답변1

정확히 다음과 같은 작업이 가능해야 합니다 awk.

awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}' /dev/eeprom

예제 스크립트에 표시된 대로 ID를 쉘 변수로 읽으려면 다음을 수행하십시오.

eeprom_id=$(awk -F':' '$1=="ID" {print $2}')

@ user414777이 의심하는 것처럼 UTF-16으로 인코딩된 파일을 다루고 있다면 다음을 사용해야 할 수도 있습니다.

cat /dev/eeprom | tr -d '\0' | awk -F':' -v ref_id="C000139-102" '$1=="ID" {if ($2==ref_id) print "Identical"; else print "WRONG"}'

아니면 시도해 보세요

awk -F':' -v ref_id="C000139-102" '{gsub(/\x00/,""); if ($1=="ID") {if ($2==ref_id) print "Identical"; else print "WRONG"}}' /dev/eeprom

ID를 쉘 변수로 다시 읽어옵니다.

eeprom_id=$(cat /dev/eeprom | tr -d '\0' | awk -F':' '$1=="ID" {print $2}')

또는

eeprom_id=$(awk -F':' '{gsub(/\x00/,""); if ($1=="ID") print $2}' /dev/eeprom)

관련 정보