私はこの質問のアドバイスを使用してきました: bash (Linux) で 1 つの csv から別の csv (vlookup など) の値を見つける
複数のデータ ファイルを調べて、vlookup スタイルの方法で他の (1 つの) 参照ファイルから列を追加するスクリプトを作成してみます。
データファイルの例 (*.data)
info1 7 44567 1 2 marker1
info2 3 143679 2 2 marker2
参照ファイルの例 (ref.txt、参照元のファイル)
marker1 66%
marker2 34%
2 番目の参照ファイルの例 (ref2.txt、参照する 2 番目のファイル)
info1 正確 info2 部分的
出力が必要
info1 7 44567 1 2 marker1 66% exact
info2 3 143679 2 2 marker2 34% partial
試行されたループ (参照ファイルを 1 つだけ表示します。まだそのビットが機能していないためです!)
#!/bin/bash
for file in `ls /path/*.data`;
do
for i in $file;
do
KEY=$(cut -f 6 $file);
printf "%s\t" $i;
grep "${KEY}" /path/ref1.txt | cut -f 2 ;
done
done
私が書いたスクリプトには 2 つの問題があると思います。出力は現在、入力ファイルのすべての行が追加されるのではなく、入力ファイルごとに 1 行であり、ファイル内の行ではなくファイルのファイル名です。ただし、参照ビットは機能しているようです(1行の出力でわかることから)。つまり:
/path/1.data 66%
何がうまくいかないのか、またはこれを行うためのより賢い方法を提案してください。どうもありがとう。