#!/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 텍스트 문제의 영향을 받지 않으므로 작동합니다.
두 파일 모두에 유틸리티를 설치하고 실행하여 dos2unix
Unix 텍스트 파일인지 확인해야 합니다. 당신은 또한 볼 수 있습니다이 사이트에 대한 기타 질문이 유틸리티와 관련됩니다.
스크립트는 다음과 같이 작성할 수도 있습니다.
#!/bin/sh
Temp='Kerala'
cs1=$( awk -v pattern="$Temp" '$1 ~ pattern { print $NF }' State_list.txt )
printf '%s\n' "$cs1"
이는 제거되고 grep
그 자리에서 awk
data 내의 파일의 첫 번째 열 pattern
(명령줄에 할당된 변수)을 포함하는 모든 행을 검색하는 데 사용됩니다. 정규식 일치 대신 정확한 문자열 일치를 수행하려면 제자리에서 $Temp
사용하세요 .==
~
이 스크립트는 sh
(그리고 원본 스크립트도) 특별한 ksh
기능을 사용하지 않기 때문에 스크립트입니다.