首页 > 解决方案 > 重写 AWK 中变量字段的输入行

问题描述

我想重写以下几行(给定 3 行的示例,但它运行了大约 500 行)

sl_no, id, value1, value2, value3, total, invalid, no_option, gross_total
1,1,570,0,0,.......,655,0,1,656 
2,2,394,5,24,......,477,0,4,481 
3,3,489,9,2,.......,704,0,2,706

作为

sl_no, id, 0, no_option
sl_no, id,loop, value1
sl_no, id,loop, value2
sl_no, id,loop, value3

IE

   1,1,0,1 
   1,1,1,570 
   1,1,2,0 
   1,1,3,0 
   2,2,0,4
   2,2,1,394 
   2,2,2,5 
   2,2,3,24 
   3,3,0,2 
   3,3,1,489 
   3,3,2,9 
   3,3,3,2 

value_1 到 value_3 是可变的,即它可以是 value_1 到 value_15 或者它可以是 value_1 到 value_8 左右

我尝试使用 AWK,但变量值列表的硬编码是不可管理的

$ awk -F, '{printf("%d,%s,0,%d\n%d,%s,1,%d\n%d,%s,2,%d\n%d,%s,3,%d\n",$1,$2,$(NF-1),$1,$2,$3,$1,$2,$4,$1,$2,$5)}' input.txt > output.txt

标签: awk

解决方案


awk 是一种编程语言,你可以遍历字段。

假设最后四个是固定的,您希望从第三个循环到倒数第四个。

awk -F , '{ printf "%i,%i,%i,%i\n", $1, $2, 0, $(NF-1)
  for(i=3; i<NF-4; ++i)
    printf "%i,%i,%i,%i\n", $1, $2, i-2, $i }' input.txt >output.txt

推荐阅读