Ksh 스크립트에서 grep 변수를 사용하는 방법

Ksh 스크립트에서 grep 변수를 사용하는 방법
#!/bin/ksh
Temp=Kerala
cs1=`grep "$Temp" State_list.txt | awk '{print $NF}'`
echo $cs1 #("Not seeing output KL":

다음과 같이 코드를 변경하면 작동합니다.

cs1=`grep "Kerala" State_list.txt | awk '{print $NF}'`

...하지만 변수로 전달하고 싶습니다.

State_List.txt 파일은 다음과 같습니다.

Karnataka KAR
TamilNadu TN
Kerala    KL

답변1

이 문제는 댓글 섹션에서 해결되었습니다.

요약:

이러한 파일(스크립트 파일 및 데이터 파일 포함)은 DOS 텍스트 파일입니다. Unix에서는 \r각 줄 끝에 추가(캐리지 리턴) 문자가 있음을 의미합니다.

스크립트의 경우 이는 변수 할당을 의미합니다.

Temp=Kerala

Kerala\r변수 에 값을 할당합니다 Temp. 데이터 파일에는 값이 포함되어 있지 않으므로 찾을 수 없습니다.

변수 대신 삽입된 값을 사용하여 스크립트를 실행하면 데이터의 해당 위치에 있는 DOS 텍스트 문제의 영향을 받지 않으므로 작동합니다.

두 파일 모두에 유틸리티를 설치하고 실행하여 dos2unixUnix 텍스트 파일인지 확인해야 합니다. 당신은 또한 볼 수 있습니다이 사이트에 대한 기타 질문이 유틸리티와 관련됩니다.


스크립트는 다음과 같이 작성할 수도 있습니다.

#!/bin/sh

Temp='Kerala'
cs1=$( awk -v pattern="$Temp" '$1 ~ pattern { print $NF }' State_list.txt )
printf '%s\n' "$cs1"

이는 제거되고 grep그 자리에서 awkdata 내의 파일의 첫 번째 열 pattern(명령줄에 할당된 변수)을 포함하는 모든 행을 검색하는 데 사용됩니다. 정규식 일치 대신 정확한 문자열 일치를 수행하려면 제자리에서 $Temp사용하세요 .==~

이 스크립트는 sh(그리고 원본 스크립트도) 특별한 ksh기능을 사용하지 않기 때문에 스크립트입니다.

관련 정보