2016-06-01 6 views
1

これは私の最初の投稿であり、bashコーディングではかなり新しいです。 私はいくつかの実験を行いましたが、gnuplotでプロットするために、反応ラベルを結果に追加する必要があります。テーブルをループしてそのテーブルの情報を別のファイルに追加する

私たちは、このようなファイルがあります:示されたファイルの最初の列は、複数の値が続き、同じである

G135b CH2O+HCO=O2+C2H3 
R020b 2CO+H=OH+C2O 
R021b 2CO+O=O2+C2O 

と(私は今のアクセスをカント、申し訳ありません)結果ファイルを。彼らは同じ順序ではありません。 ここでは、結果ファイルをループして、最初の列の値を取得し、示されたファイルで検索し、その行に反応ラベルを追加します。

  1. 結果ファイルのすべての行をループして、一時変数の最初の列の値を取得する方法はありますか? 私はこのように、この変数を使用したい:

    grep -r '^$var' shownfile | awk '{print $2}' 
    

    (バックこのような何かを与える:CH 2 O + HCOを= O2 + C 2 H 3)を私はResult-にその行の結果を追加するにはどうすればよい

  2. ファイル?

編集:これまで

G135b : 0.178273 C H 2 O + H C O = O 2 + C 2 H 3

G135b CH2O+HCO=O2+C2H3

である私も、このようなファイルから行くためにスクリプトを書いた

#!/bin/bash 
file=$(pwd) 
cd $file 
# echo "$file" 
cut -f1,3 $file/newfile >>tmpfile 
sed -i "s/://g" tmpfile 
sed -i "s/ //g" tmpfile 
cp tmpfile newfile 
  1. ファイル内でcutコマンドを実行するにはどうすればよいですか? sedの-iと同じです。私の回避策は、現在のディレクトリに別のファイルを作成するので、かなり醜いです。

ありがとうございました:)

答えて

0

joinコマンドは、内側には2つのファイルに(デフォルトでは)それぞれのWRTの第一の結合列を実行することになるここに働くだろう。 reactions.awkと呼ばれるファイルには、その後、awk -f reactions.awk shownfile resultfileを呼び出すこと

NR == FNR { data[$1] = $2; next; } 
{ print $0 " " data[$1]; } 

割引:awkを使用して

$ cat data 
G135b CH2O+HCO=O2+C2H3 
R020b 2CO+H=OH+C2O 
R021b 2CO+O=O2+C2O 

$ cat result_file 
G135b a b c 
R020b a b 
R021b a b x y z 

$ join data result_file 
G135b CH2O+HCO=O2+C2H3 a b c 
R020b 2CO+H=OH+C2O a b 
R021b 2CO+O=O2+C2O a b x y z 
+0

問題は、ファイルがソートされていないので、私は最初のファイルの同等の最初の列を検索する必要があります。 – Tuni

+0

@Thunfischあなたはソートしてから次のようにjoinを使うことができます: 'join <(sort -k 1 data)<(sort -k 1 result_file)' – ritesht93

+0

私はジョイントコマンドをチェックしました。ラベルファイルに存在しない結果ファイル内の反応。だから、その最初のケースがポップアップすると、すべてのラベルが台無しになります – Tuni

0

は、それはのようなものになるでしょう。

+0

これを正しくするには:これは最初に両方のファイルの行番号が同じかどうかを確認しますデータ[$ 1] = $ 2とは何ですか?実行する別のアクションがあることをawkに伝える次のものはありますか? $ 0を出力すると、現在作業中のオブジェクトを出力するようにawkに指示しますが、それ以降は何を行いますか? お手伝いをありがとう:) – Tuni

0
awk '{a[$1]=a[$1]$2} END{for (i in a){print i,a[i]}}' file1 file2 
+0

正確には何ですか? パターンは次のとおりです。ファイル1の行1がファイル2の行1と等しい場合は、行を読み、その読みが終わると、現在の行番号と現在の行を表示します。 正しくなっていますか? – Tuni

+0

'a'は、行番号に関係なく付加された2つのファイルからデータを収集して印刷します。 1列目と追加デ​​ータ – Chet

関連する問題