CSV 파일의 셀 읽기

CSV 파일의 셀 읽기

이 숫자 표를 csv다음과 같은 파일 형식으로 저장했습니다.

5,  6,  9,  5,
2,  8,  1,  1, 
1,  2,  3,  6,
. . .  . .
. . .  . .
. . .  . .
. . .  . .

이 표의 각 행은 직사각형의 크기를 설명합니다.

다음과 같이 명령줄에 한 줄에 4개의 숫자를 입력하여 직사각형을 만들고 싶습니다.

rectang -cs x1 x2  x3 x4  # rectang is a script to create rectangle; -cs flag means dimensions; x1, x2, x3 x4 the rectangle dimensions 

table.csvcsv 파일 " "을 탭으로 구분된 텍스트 " table.txt" 파일로 변환한 다음 다음과 같이 for 루프에서 사용하려고 합니다 .

for i in $(cat table.txt); do
rectang -cs x1 x2  x3 x4
done

하지만 테이블에서 "직사각형" 명령으로 x1 x2 x3 x4를 제공하는 방법을 모르겠습니다.

도와 주셔서 감사합니다.

답변1

read명령은 문자로 구분된 여러 단어를 캡처할 수 있습니다 $IFS(기본값: 공백, 탭, 줄바꿈).

while read -r d1 d2 d3 d4; do
    rectang -cs "$d1" "$d2" "$d3" "$d4"
done < file.csv

수정된 데이터(쉼표와 공백으로 구분된 필드)가 주어지면 다음을 수행합니다.

while IFS=",$IFS" read -r d1 d2 d3 d4; do # ...

필드 구분 기호로 쉼표를 포함합니다.

답변2

파일이 다음과 같은 경우:

cat table.txt | while read i
do
    rectang -cs  $i
done

이것은 다음을 호출합니다:

rectang -cs 5  6  9  5
rectang -cs 2  8  1  1 

등.

답변3

Glenn의 답변은 물론 매우 훌륭하지만 이 경우에는 이를 사용하여 awk명령줄을 생성한 다음 결과를 셸로 파이프합니다. POSIX의 일부 로서 awk효과적인 솔루션이라고 할 수 있습니다.

awk -F'[, ]+' '{print "rectang -cs", $1, $2, $3, $4}' table.csv | sh

또는 첫 번째 필드를 첫 번째 필드에 할당하여 필드 구분 기호의 재계산을 트리거합니다.

awk -F'[, ]+' '$1=$1{print "rectang -cs", $0}' table.csv | sh

또는 비슷한 패턴을 사용합니다.

sed -e 's/^/rectang -cs /' -e 's/, */ /g' table.csv | sh

물론 실험할 때는 명령을 보고 sh.

관련 정보