我有一个CSV文件,其数据格式如下。我想将第3列定义X的行拆分X次。
水果,香蕉,3
水果,柠檬,1
水果,橙色,2
输出应如下所示。
水果,香蕉,1
水果,香蕉,1
水果,香蕉,1
水果,柠檬,1
水果,橙色,1
水果,橙色,1
在Linux中使用awk或类似程序是否可以轻松实现这一目标?
答案 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列。