【发布时间】:2019-08-22 04:35:30
【问题描述】:
给定一个数据文件,我想使用 awk 将某些列转置为行。
输入数据文件每个月有一列,像这样:
FirstName|LastName|Jan|Feb|Mar
First_1|Last_1|1|10|100
First_2|Last_2|2|20|200
First_3|Last_3|3|30|300
我想保留前两列,并将月份转换为行。我的预期输出是:
First_1|Last_1|Jan|1
First_1|Last_1|Feb|10
First_1|Last_1|Mar|100
First_2|Last_2|Jan|2
First_2|Last_2|Feb|20
First_2|Last_2|Mar|200
First_3|Last_3|Jan|3
First_3|Last_3|Feb|30
First_3|Last_3|Mar|300
我试过了
awk -F'|' 'NR>1 {{OFS="|"} {for (i=3; i<=NF; i++) {print $1,$2,$i}}}' input_file
这给了我几乎想要的输出:
First_1|Last_1|1
First_1|Last_1|10
First_1|Last_1|100
First_2|Last_2|2
First_2|Last_2|20
First_2|Last_2|200
First_3|Last_3|3
First_3|Last_3|30
First_3|Last_3|300
但我无法添加月份列。我试过这个:
awk -F'|' 'NR>1 {{OFS="|"} {for (i=3; i<=NF; i++) {print $1,$2,NR==1 {print $i}},$i}}}' input_file
但我得到一个语法错误。
【问题讨论】:
-
在 SO 上,我们确实鼓励人们为解决自己的问题而付出努力。请添加相同的内容,然后让我们知道。