我有一个大文件(〜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
但列值没有变化。
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将执行默认操作,即打印该行。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句