CSV 라인을 명령 매개변수로 사용

CSV 라인을 명령 매개변수로 사용

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

관련 정보