각 열에 텍스트 추가 [중복]

각 열에 텍스트 추가 [중복]

나는 다음 줄을 가지고 있습니다

3, 3, 100
4, 2, 50
8, 5, 80
.
.
.

나는 다음과 같은 출력을 원한다

line starts at 3 and ends at 3 with value 100
line starts at 4 and ends at 2 with value 50
line starts at 8 and ends at 5 with value 80
.
.
.

다음을 시도했습니다. sed 's/^/line starts at /'그런 다음 이 명령을 출력에 적용했습니다. sed 's/, / and ends at /'그런 다음 이 명령을 출력에 적용했습니다 sed 's/, / with value /'. 한줄로 할 수 있는 방법 없을까요?

답변1

awk이 형식화된 입력의 경우 형식화된 출력이 유용합니다.

awk -F, '{printf("line starts at %d and ends at %d with value %d\n", $1, $2, $3)}' file 
line starts at 3 and ends at 3 with value 100
line starts at 4 and ends at 2 with value 50
line starts at 8 and ends at 5 with value 80

답변2

while read루프 printf:

while IFS=', ' read c1 c2 c3; do
    printf 'line starts at %s and ends at %s with value %s\n' \
        "$c1" "$c2" "$c3"
done <file

IFS변수를 공백과 쉼표로 설정 하면 read명령은 이러한 문자를 필드 구분 기호로 사용합니다.

산출:

line starts at 3 and ends at 3 with value 100
line starts at 4 and ends at 2 with value 50
line starts at 8 and ends at 5 with value 80

답변3

sed에 -e 옵션이 있다는 것이 밝혀졌습니다

sed -e 's/^/line starts at /g' -e 's/, / and ends at /' -e 's/, / with value at /'

답변4

셸 자체에서 이 작업을 수행하는 간단하고 빠른 방법이 있습니다.


# cat f
3, 3, 100
4, 2, 50
8, 5, 80

# cat f | while read line ;  do  IFS=", " array=($line) ; echo "line starts at ${array[0]} and ends at ${array[1]} with value ${array[2]}"; done 

line starts at 3 and ends at 3 with value 100
line starts at 4 and ends at 2 with value 50
line starts at 8 and ends at 5 with value 80

관련 정보