다음과 같은 CSV 파일이 있습니다.
Name,Age,Address
Daniel Dvorkin,28,Some Address St. 1234
(... N ...)
Foo Bar,90,Other Address Av. 3210
이 매개변수를 사용하는 명령이 있습니다.
./mycommand --name="Daniel Dvorkin" --age=28 --address="Some Address St. 1234"
가장 쉽게 달리는 방법은 무엇입니까?내 주문CSV의 각 행에 대해?
답변1
이것은 매우 간단합니다.
sed '1d;s/\([^,]*\),\([^,]*\),\([^,]*\)/.\/mycommand --name="\1" --age="\2" --address="\3"/e' file.csv
1d
머리글 행이 제거됩니다.
s
이 명령은 문자열을 수정하며, 예제와 마찬가지로 명령 e
끝에서 s
문자열이 실행됩니다 . 이것은 GNU 확장이므로 GNU sed가 없으면 다음을 사용할 수 xargs
있습니다 e
.
sed '1d;s/\([^,]*\),\([^,]*\),\([^,]*\)/.\/mycommand --name="\1" --age="\2" --address="\3"/' file.csv | xargs
답변2
CSV가 인용 메커니즘이 없는 간단한 CSV인 경우(따라서 필드에 쉼표가 나타날 수 없음) 셸에서 구문 분석할 수 있습니다.
{
read line # ignore the header line
IFS=,
while read -r name age address; do
./mycommand --name="$name" --age="$age" --address="$address"
done
} <input.csv
필드를 참조할 수 있는 경우 실제 CSV 파서가 필요합니다. 사용펄, 파이썬, R, Ruby 또는 기타 언어.
답변3
sed 외에도 다음이 있습니다.앗...
awk -F, 'NR > 1 { system("./mycommand --name=\\\"" $1 "\\\" --age=" $2 " --address=\\\"" $3 "\\\"") }' < file.csv