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

관련 정보