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