에코가 있는 Bash 스크립트 - 파일에서 printf의 이상한 동작

에코가 있는 Bash 스크립트 - 파일에서 printf의 이상한 동작

특정 조건과 일치하는 경우 .csv 파일의 일부를 다른 파일로 인쇄하고 싶습니다.

csv 내용은 이렇습니다

abc test;ABCtest.it
xyz test;XYZtest.com

변수의 내용을 읽은 다음 일부 문자열을 grep합니다.

csvContent=$(<$file.csv)

csvRow="$(echo "$csvContent" | grep -i "abc test")"

IFS=';' read -a array <<< "$csvRow"
name="${array[0]}"
url="${array[1]}"

echo -ne "\n$url,$name" >> "$outputDir/$fileName"

그러나 출력 파일에는 URL 부분이 포함되어 있지 않습니다.

내가 이것을 시도하면

echo $url

터미널에 인쇄됩니다!

또한 printf와 하드코딩된 파일 이름을 사용해 보았지만 아무 것도 없었습니다!

printf '%s %s\n' "$url" "$name"  >> test.txt

$url 변수 뒤에 다른 항목(변수 또는 문자열)을 연결하려고 하면 일부 부분이 삭제되거나 출력 파일에 덮어쓰여지는 것 같습니다.

예를 들어, 내가 하려고 하면

printf '%s %s\n' "$url" "pp"  >> test.txt

간단히 cat test.txt로 얻는 것은 다음과 같습니다.

 pptest.it

시작의 빈 공간이 일부를 덮고 있는 것 같아

$url 변수의 내용은 다음과 같아야 합니다.ABCtest.it

이건 이상해

답변1

파일의 행 끝에는 캐리지 리턴이 있으므로 변수 file.csv로 읽혀집니다 url. 따라서 이를 작성하면 URL 데이터 뒤에 캐리지 리턴이 오고 후속 데이터가 덮어쓰여집니다.

답변2

이와 같은 표준 csv 파일이라면

col1,col2,abc test;ABCtest.it,col4,col5
col1,col2,xyz test;XYZtest.com,col4,col5

Cut이나 awk를 사용할 수 있습니다.

grep -i "abc test" <filename.csv> | cut -f3 -d',' | cut -f2 -d';'

관련 정보