나는 이 문제를 해결하려고 노력하고 있습니다.
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
마지막 요소를 저장하여 또 다른 요소를 생성합니다. 요소의 idx는 13번째 요소를 수집합니다. 배열의 마지막 요소까지의 요소입니다. (배열 인덱싱은 0부터 시작합니다.)q//
,
slice
slice
@F[12..$#F]
@F
$#F
Perl
- 이제 다양한 매개변수가
print
=(기본값은 null)와 연결됩니다.OFS
$,