셸 - 값을 쉼표로 구분된 문자열로 인쇄합니다.

셸 - 값을 쉼표로 구분된 문자열로 인쇄합니다.

쉼표로 구분된 값이 포함된 txt 파일이 있습니다.

cat file.txt

abc,def,ghi
abc,ghi
def,abc,ghi
def,abc
abc,def
abc,def,ghi

while do read line from file이 값을 쉼표로 구분하여 인쇄하고 싶습니다 .

예를 들어:

expecting output for Line no 1:
first col=abc
second col=def
third col=ghi
expecting output for Line no 2:
first col=abc
second col=ghi

행에 세 개의 값이 있는 경우 읽은 행이 인쇄되어야 합니다.

first col=value
second col=value
third col=value

기타

first col=value
second col=value

이 쉘 스크립트를 어떻게 만들 수 있나요?

답변1

bash를 사용하면 할 수 있습니다

ordinals=( first second third fourth fifth sixth )
n=0
while IFS=, read -ra cols; do
    echo "line $((++n))"
    for i in "${!cols[@]}"; do
        echo "${ordinals[i]} col=${cols[i]}"
    done
done < file

각 줄의 단어를 이라는 배열로 읽은 cols다음 수행합니다.색인값을 서수와 연결할 수 있도록 이 배열의 값입니다.

처음 3개 행에 대해 우리는 다음을 얻습니다.

line 1
first col=abc
second col=def
third col=ghi
line 2
first col=abc
second col=ghi
line 3
first col=def
second col=abc
third col=ghi

답변2

$ awk -F, '{ print "line " NR; for (i=1;i<=NF;i++) { print "Col " i "="$i } }' input
line 1
Col 1=abc
Col 2=def
Col 3=ghi
line 2
Col 1=abc
Col 2=ghi
line 3
Col 1=def
Col 2=abc
Col 3=ghi
line 4
Col 1=def
Col 2=abc
line 5
Col 1=abc
Col 2=def
line 6
Col 1=abc
Col 2=def
Col 3=ghi

숫자 열을 "첫 번째", "두 번째" 등으로 음역하고 싶다면 배열을 정의하고 이를 i색인으로 사용하여 숫자와 일치하는 단어를 찾을 수 있습니다.

답변3

입력 파일에 최대 3개의 열만 있다고 가정하면 다음은 while-loop를 사용하여 read표준 입력에서 쉼표로 구분된 값을 읽고 표시된 것과 유사한 형식으로 출력합니다.

#!/bin/sh

while IFS=, read -r first second third
do
    printf 'Line %d:\n' "$(( ++n ))"
    ${first:+printf 'First:\t%s\n' "$first"}
    ${second:+printf 'Second:\t%s\n' "$second"}
    ${third:+printf 'Third:\t%s\n' "$third"}
done

매개변수 확장은 가 설정되어 있고 비어 있지 않은 경우 ${variable:+word}로 확장됩니다. 해당 변수에 인쇄할 데이터가 포함되어 있으면 코드는 이를 사용하여 출력을 수행합니다.wordvariableprintf

제공된 데이터를 테스트합니다.

$ ./script.sh <file
Line 1:
First:  abc
Second: def
Third:  ghi
Line 2:
First:  abc
Second: ghi
Line 3:
First:  def
Second: abc
Third:  ghi
Line 4:
First:  def
Second: abc
Line 5:
First:  abc
Second: def
Line 6:
First:  abc
Second: def
Third:  ghi

관련 정보