将变量添加到CSV文件中的列

时间:2016-08-01 21:48:55

标签: linux csv awk

我有一个大文件(~10GB),我想复制该文件10次,但每次都要向第一列添加一个变量:

for i in (1, 10):
    var = (i-1) * 1000
    # add var to the first column of the file and save the file as file(i).csv

到目前为止,我已经尝试过:

#!/bin/bash
for i in {1..10}
do
   t=1
   j=$(( $i - t ))
   s=1000
   person_id=$(( j * add ))
   awk -F"," 'BEGIN{OFS=","} NR>1{$1=$1+$person_id} {print $0}' file.csv > file$i.csv
done

但列值没有变化。

1 个答案:

答案 0 :(得分:2)

Awk变量与shell变量不同。

替换:

awk -F"," 'BEGIN{OFS=","} NR>1{$1=$1+$person_id} {print $0}' file.csv > file$i.csv

使用:

awk -F"," -v id="$person_id" 'BEGIN{OFS=","} NR>1{$1=$1+id} {print $0}' file.csv > "file$i.csv"

这使用-v选项定义awk变量id,其值为shell变量person_id的值。

由于,不是shell活动字符,因此可以简化代码。此外,更改OFS定义的位置可以进一步缩短代码:

awk -F, -v id="$person_id" 'NR>1{$1+=id} 1' OFS=, file.csv > "file$i.csv"

最后,我们用隐秘的速记{print $0}替换了1。 (这是因为awk将1解释为一个逻辑条件,它将其计算为true,并且由于没有提供任何操作,awk将执行默认操作,即打印该行。)