CSVファイルから個々のデータを取得し、grepまたはawkコマンドで変数として使用する方法を見つけようとしています。どちらも適切に見えますが、これを適切に実行するように指示する方法がわかりません。
たとえば、次のようにTSV形式のデータセットがあります。
ID Name Eye Color
1 Bill Blue
2 Sam Blue
3 Fred Brown
4 Joe Brown
5 Ted Blue
6 Bob Brown
これは実際のデータセットではありませんが、同じように動作します。これは完全なタンパク質結合データベースです。 TSVは300MBで、何百万ものエントリと数十の列が含まれているため、実際の内容を明確に含めることはできません。
青い目を持つ個人の行を含むファイルを作成したかったので、「ID」列で構成されたCSVファイルを作成しました。この場合、次のようになります。
1、2、5
「ID」を含むこのCSVは、「Grep」コマンドを使用してキーワードを検索することによって生成されました。
私は最終的に次のTSVファイルが欲しいです。 1 Bill Blue 2 Sam Blue 5 Ted Blue
しかし、どうすればいいのかわかりません。 awkまたはgrepを使用して各項目に対して個別に生成し、ID番号を条件として含めることができますが、私が使用するCSVには1200個の項目があるので、このプロセスを自動化したいと思います。
以下のコードは単一の項目に対して望ましい結果を生成しますが、ID番号を使用して検索を自動化したいと思います。
BindindDB_All.tsvは私のソースファイルで、何百万ものエントリがあります。これにより、「new.tsv」というTSVが生成され、ID(列1)が66106のBininddDB_All.tsvファイルの完全な行が含まれます。
awk '$1 == 66106' BindingDB_All.tsv >> new.tsv
私はこのようなことをしたい:
awk '$1 == ID.csv' BindingDB_All.tsv >> new.csv
各IDを読み取り、行をnew.csvに印刷してから、次のIDを読み取り、同じことを行います。
CSVファイルには、それぞれ一意のIDを持つ数百万のクエリと比較できる1,200のクエリが含まれています。各行の他の変数でIDを見つけるため、列1のみを検索する必要があります。
要約すると、行の列1を見て、CSVファイルの最初の数字と比較して一致することを確認する必要があります。一致するものがない場合は、列1の次の行を確認し、一致するものが見つかるまで確認を続ける必要があります。列1がCSVの最初のデータ要素と一致する行を見つけたら、その行を出力したいと思います。次に、1200行すべてが見つかるまでCSVの2番目の項目について繰り返したいと思います。
どんなアイデアがありますか?これはループの問題のように聞こえますが、どのように機能させるのかわかりません。
編集する:
人々はまだ助けを求めているようですので、投稿された質問に答えてみましょう。
以下は、検索パラメータとして使用されるID番号を含む実際のデータの最初の6項目です。
66106
66107
66108
66109
66110
50127715
列名もなく、他のデータもありません。異なるファイル(TSV)から個別に検索したい値です。 TSVサイズに関しても私も間違っていました。 300MB圧縮された4GB TSVがあります。ファイルには、私のプログラムで見られるものよりも多くの項目が含まれています。以下は、数百万の項目のうちの単一の項目の例です。これらすべてのデータを一度に抽出する必要があるため、整理することはできません。
50127715 CCCC(CCC)c1nc2N3[C@H]4CCC[C@H]4N=C3N(C)C(=O)c2[nH]1 InChI=1S/C18H27N5O/c1-4-7-11(8-5 -2)15-20-14-16(21-15)23-13-10-6-9-12(13)19-18(23)22(3)17(14)24/h11-13H,4 -10H2,1-3H3,(H,20,21)/t12-,13+/m1/s1 CSRSQFSFDXYRFV-OLZOCXBDSA-N 50073697 5-メチル-2-(1-プロピルブチル)-(6aR,9aS )-3 ,4,5,8-テトラヒドロシクロペンタ[4,5]イミダゾ[2,1-b]プリン-4-オン::CHEMBL280307 ホスホジエステラーゼ 1 Bos taurus 60 ChEMBL 10.1016/s0960-894x (98 )00681-7 9990447 Ho、GD Silverman、L Bercovici、A Puchalski、C Tulshian、D Xia、Y Czarniecki、M Green、M Cleven、R Zhang、H Fawzi、Schering-Plough研究所 http://www.bind/chemsearch/marvin/MolStructure.jsp?monomerid=50073697 http://www.binddb.org/jsp/dbsearch/PrimarySearch_ki.jsp?energyterm=kJ/mole&tag=pol&polymerid=49000914&target=phosphodiesterase+1&column=ki&startPg=0&Increment=50&submit=Search http://www.bounddb.org/jsp/dbsearch/PrimarySearch_ki.jsp?energyterm=kJ/mole&tag=r21&monomerid=50073697&enzyme=phosphodiesterase+1&column=ki&startPg=0&Increment=50&submit=Search 44272162 103967010 CHEMBL280307 ZINC28221715 1 LAY PEAVIVTLKDVDKWSFDVFALNEASGEHSLKFMIYELFTRYDLINRFKIPVSCLIAFAEALEVGYSKYKNPYHNLIHAADVHT QTRSDVAILY NDRSVLENHHVSAAYRLMQEEEMNVLINLSKDDWRDLRNLVIEMVLSTDMSGHFQQIKNIRNSLQQPEGLDKAKTM SLILHAAD ISHPAKSWKLHHRWTMALMEEFFLQGDKEAELGLPFSPLCDRKSTMVAQSQIGFIDKPT SLASVDLKSFKNSLVDIIQ QNKERWKELAAQGEPDPHKNSDLVNAEEKHAETHSカルシウム/カルモジュリン依存性3',5'-環状ヌクレオチドホスホジエステラーゼ1A P141 00 Q08E30,Q28063
このボックスからTSVにどのように読み込むのかわかりませんが、50127715は最初の列であるID列です。興味のあるID番号を含む最初のCSVファイルで、一度に1つのID番号を指定して、最初の列で大きなTSVを検索したいと思います。数字が最初の列に含まれている場合は、その行をファイルに書き込み、次のIDを検索したいと思います。すべての結果を1つのファイルに保存したいと思います。
ここまで来るためにとられたすべての段階でこれを行うより簡単な方法があると確信していますが、それをより明確にする方法はわかりません。列1の大きなTSVで「66106」を検索し、その行を見つけたら、行全体をファイルに書き込むようにしたいと思います。次に「66107」を検索して検索し、同じファイルに追加します。これにより、何百万ものものではなく、1,200個のエントリを含むCSVファイルまたはTSVファイルがあります。
答え1
$ awk -F'\t' '(NR==1) || ($3=="Blue")' file
ID Name Eye Color
1 Bill Blue
2 Sam Blue
5 Ted Blue
しかし、実際に望むのは、各IDに対して新しいファイルを作成するようです。例のようにIDが一意であると仮定すると、次のようになります。
awk -F'\t' '{ out="out_" $1 ".txt"; print > out; close(out) }' BindingDB_All.tsv
または、各出力ファイルにヘッダーを含めたい場合:
awk -F'\t' '
NR==1 { hdr=$0; next }
{ out="out_" $1 ".txt"; print hdr ORS $0 > out; close(out) }
' BindingDB_All.tsv
答え2
後でこの問題を発見できる人のための解決策があります。私が最初にやったことは、次のコマンドを使用してTSVをCSVに変換することです。
sed 's/\t/,/g' filename_with_tabs > filename_with_commas.csv
次に、私が探しているファイルを検索するコードは次のようになります。
awk -F, 'FNR==NR {h[$1] = $0; next} {print $0,h[$1]}' file1 file2 > new_file.csv
これにより、別のCSVに含まれるテキストの最初の列が検索されます。この例では、「file1」は検索するファイルで、「file2」には検索する文字列が含まれています。どちらのファイルもCSV形式です。
これにより、file2に含まれるIDの1つと一致する列1の特定のIDを持つfile1のすべての行を含む別のCSVファイルが作成されます。
これが数週間私の脳を殺したので、いつか誰かに役立つことを願っています。私は自分で解決策を見つけることができず、上司が私に見せなければなりませんでした。