我正在尝试解决这个问题。
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[...]
指的是slice
数组@F 的元素。那么,@F[0,9..11]
是由 @F 的第 1 个、第 10 到 12 个元素组成的切片,然后将它们join
组合在一起,并在切片后添加comma
一个虚拟空元素,以生成即将到来的.另一个通过保存最后一个元素的 idx收集数组的第 13 个元素,直到最后一个元素。 (请注意,数组索引是从零开始的)。q//
,
slice
slice
@F[12..$#F]
@F
$#F
Perl
- 的各种参数现在用=
print
连接在一起(默认为 null)。OFS
$,