根据单元格值将CSV行拆分为多行

时间:2019-02-28 08:23:52

标签: linux csv

我有一个CSV文件,其数据格式如下。我想将第3列定义X的行拆分X次。

水果,香蕉,3
水果,柠檬,1
水果,橙色,2

输出应如下所示。

水果,香蕉,1
水果,香蕉,1
水果,香蕉,1
水果,柠檬,1
水果,橙色,1
水果,橙色,1

在Linux中使用awk或类似程序是否可以轻松实现这一目标?

2 个答案:

答案 0 :(得分:0)

您不需要awk,只需要shell:

data() {
  cat <<EOF
FRUIT,BANANA,3
FRUIT,LEMON,1
FRUIT,ORANGE,2
EOF
}

data | while IFS=, read -r field fruit n ; do
  for i in $(seq 1 $n) ; do
    echo "$field,$fruit,1"
  done
done

说明:

  • IFS=, read -r field fruit n行将内部字段分隔符(IFS)更改为逗号,并将该行读取为变量字段,fruit和n。

  • for i in $(seq 1 $n)行针对1中的每个i到n进行迭代。

答案 1 :(得分:0)

使用awk的解决方案:

awk -F , -v "OFS=," '{ for(i=0; i<$3; i++) print $1,$2,1; }' inputfile

说明:-F ,-v "OFS=,"设置输入和输出的字段分隔符。该循环将打印各个列。

替代:

 awk -F , -v "OFS=," '{ i=$3;$3=1;for(; i>0; i--) print; }' inputfile

在循环打印整个记录/行之前修改了第3列。