열 범위를 쉼표로 구분하여 인쇄하고 나머지는 쉼표로 구분하지 않고 인쇄합니다.

열 범위를 쉼표로 구분하여 인쇄하고 나머지는 쉼표로 구분하지 않고 인쇄합니다.

나는 이것을 알아 내려고 노력하고 있습니다.

awk '{print $1","$10","$11","$12","$13,$14,$15,$16,$17,$18,$19}' <<< "$PASTE_1" > test.csv

$1 $10 $11 $12를 쉼표로 구분하여 인쇄한 다음 쉼표 구분 없이 줄 끝까지 $13을 계속 인쇄해야 합니다. 13달러부터 공백이 많으니까요.

답변1

다음과 같은 것을 의미합니까?

awk '{a = ""; for (i = 13 ; i <= NF ; i++) a = a $i; 
       print $1 "," $10 "," $11 "," $12 "," a}'

입력

a b c d e f g h i j k l m n o p q r s t u v w x y z

다음을 제공합니다:

a,j,k,l,mnopqrstuvwxyz

즉, 13부터 시작하는 필드가 서로 연결되어 1, 10, 11, 12 뒤에 인쇄됩니다.

답변2

이를 수행하는 한 가지 방법:

awk -v OFS=, '{print $1, $10, $11, $12, ($13 $14 $15 $16 $17 $18 $19) }'

답변3

perl -lane 'print join(",", @F[0,9..11], q//), @F[12..$#F]'

설명

  1. 배열은 @F필드를 한 줄로 유지합니다. @F 배열의 요소 중 @F[...]하나를 참조합니다 . slice따라서 @F[0,9..11]@F의 첫 번째, 10~12개 요소로 구성된 슬라이스는 join함께 결합 되고 comma비어 있는 더미 요소가 q//슬라이스에 접미사로 추가되어 ,다음 slice. 다른 하나는 마지막 요소의 idx를 보유하는 를 통해 배열 slice @F[12..$#F]의 마지막 요소까지 13번째를 수집합니다 . (배열 인덱싱은 에서 0부터 시작합니다 .)@F$#FPerl
  2. 이제 다양한 인수가 = (기본값은 null) print와 결합됩니다 .OFS$,

관련 정보