다음과 같은 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