2016-08-01 8 views
1

をCSVファイルに列に変数を追加し、私はそのファイルを10回複製したいが、毎回最初の列に変数を追加します。は、私は大きなファイル(〜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 

ただし、列の値は変更されません。

答えて

2

awk変数はシェル変数とは異なります。

は交換してください:

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" 

これは値シェル変数person_idの値であるawkの変数idを定義する-vオプションを使用しています。

,はシェルアクティブな文字ではないため、コードを簡略化することができます。また、OFSの定義の場所を変更するとさらにコード短縮することができます。

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

最後に、我々は不可解な速記1{print $0}を置き換えます。 (これはawkが論理的な条件として1を解釈して、trueと評価し、アクションが与えられていないため、awkが行を印刷するデフォルトのアクションを実行するためです)

+1

ありがとうございました! – Malgi

関連する問題