打印以逗号分隔的列范围,其余部分不以逗号分隔

打印以逗号分隔的列范围,其余部分不以逗号分隔

我正在尝试解决这个问题。

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

相关内容