특정 조건과 일치하는 경우 .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';'