データ配列のリストがあり、そのインデックス(id)で値を見て、データ配列のインデックスIDに保存したいと思います。スプレッドシートVALUE LOOKUP関数でこれを行うことはできますが、まだこれを行うデータがたくさんあり、大量のデータセットの場合はスプレッドシート機能が高速ではないと思います。より速く実行できるスクリプトを教えてください。私のデータ配列、インデックスID、および提案された出力は次のとおりです。
データ配列
Id Value
1 10
2 20
3 30
4 40
6 60
8 80
10 100
索引
Id
1
2
3
4
5
6
7
8
9
10
11
12
13
出力は次のとおりです
ID Value
1 10
2 20
3 30
4 40
5 NULL
6 60
7 NULL
8 80
9 NULL
10 100
11 NULL
12 NULL
13 NULL
また助けてくれてありがとう。
ベストアンサー1
非常に高速なオープンソースのNoSQL Key-Valueリポジトリであるawkとredisの完全な組み合わせを試してください。http://redis.io詳細はこちら)。
awkを使用して2つのファイル(「data_array.txt」と「index.txt」)を解析し、redisコマンドを生成します。
2つのawkスクリプトの結果をbashにパイプして実行します。それだけです:-)
ステップバイステップ:
次のように、3行目から始まるデータファイルを解析してredis "SET"ステートメントを生成します。
awk '{if (FNR > 2) \
print "redis-cli SET VALUE:" $1 " \"" $2"\""}' data_array.txt
redis-cli SET VALUE:1 "10"
redis-cli SET VALUE:2 "20"
redis-cli SET VALUE:3 "30"
redis-cli SET VALUE:4 "40"
redis-cli SET VALUE:6 "60"
redis-cli SET VALUE:8 "80"
redis-cli SET VALUE:10 "100"
redis "SET"ステートメントをbashにパイプして実行します。
awk '{if (FNR > 2) \
print "redis-cli SET VALUE:" $1 " \"" $2"\""}' data_array.txt | bash
OK
OK
OK
OK
OK
OK
OK
次のように、3行目から始まるインデックスファイルを解析してredis "GET"ステートメントを生成します。
awk '{if (FNR > 2) print "printf \"" $1 " \" && redis-cli GET VALUE:" $1}' index.txt
echo 1 && redis-cli GET VALUE:1
echo 2 && redis-cli GET VALUE:2
echo 3 && redis-cli GET VALUE:3
echo 4 && redis-cli GET VALUE:4
echo 5 && redis-cli GET VALUE:5
echo 6 && redis-cli GET VALUE:6
echo 7 && redis-cli GET VALUE:7
echo 8 && redis-cli GET VALUE:8
echo 9 && redis-cli GET VALUE:9
echo 10 && redis-cli GET VALUE:10
echo 11 && redis-cli GET VALUE:11
echo 12 && redis-cli GET VALUE:12
echo 13 && redis-cli GET VALUE:13
redis "GET"ステートメントをbashにパイプして実行します。
awk '{if (FNR > 2) \
print "printf \"" $1 " \" && redis-cli GET VALUE:" $1}' index.txt |\
bash
1 "10"
2 "20"
3 "30"
4 "40"
5 (nil)
6 "60"
7 (nil)
8 "80"
9 (nil)
10 "100"
11 (nil)
12 (nil)
13 (nil)
楽しむ:-)
バニー
ツイートをサイトに
埋め込む
わざわざここに答えを投稿します。 Abrahamのサンプルデータは非常に透明なので、私の答えをすぐに理解できることを願っています。データUnixのvlookup関数例を見ると混乱しています...