나는 cat'ing하고 awk를 사용하여 일부 변수를 얻는 bash 스크립트를 가지고 있습니다. 첫 번째 것은 잘 작동하지만 두 번째 것은 앞에 $와 후행 \r... 아이디어가 있습니까?
#!/bin/bash
newTS=$( cat times.txt | awk -F';' '{print $2}')
ctime=$( cat times.txt | awk -F';' '{print $3}')
echo 'nextTime='$newTS
echo 'currentTime='$ctime
echo 명령으로 인해 발생하는 이유
+ echo $'currentTime=2020-04-21T12:36:14\r'
첫 번째 awk는 어디에 있나요?
+ echo nextTime=2020-04-21T11:46:11
따옴표나 변수 확장이 있어야 합니까?
이것은 내 times.txt 파일입니다.
2020-04-21T11:45:11;2020-04-21T11:46:11;2020-04-21T12:36:14
답변1
입력 파일은 DOS 텍스트 파일입니다. 이는 Unix 도구가 각 줄에 표시하는 마지막 문자가 캐리지 리턴(보통 캐리지 리턴으로 기록됨 \r
)임을 의미합니다.
이는 행의 세 번째 필드의 일부이므로 \r
두 번째 프로그램의 출력에서 얻을 수 있습니다 . awk
두 번째 필드가 줄 끝에 있지 않기 때문에 두 번째 필드에 없습니다. 따라서 첫 번째 프로그램은 여기에 포함된 문자열을 awk
생성하지 않습니다 .\r
이를 사용하여 스크립트를 실행할 수도 있습니다 bash -x
. 이를 통해 셸에서 출력을 추적(디버깅)할 수 있습니다. 쉘이 특수 문자(예: 캐리지 리턴)가 포함된 명령 추적을 출력할 때 쉘(?)은 연관된 문자열을 "C 문자열", 즉 $'...'
.
dos2unix
예를 들어 다음을 사용하여 입력 데이터 파일을 Unix 텍스트 파일로 변환합니다.