2つのファイルをマージして新しいファイルに割り当てたいのですが、 :awkは、列入力を修正して2つのファイルをマージし、出力ファイルに余分な列を追加します。
ファイル1:VDR.txtは、ヘッダーを持っていないスペースが分離され、次のようになります。
chr12-45000000-50000000 --- rs192072617 48225416 0.000 0.270 0.999 0 -1 -1 -1
chr12-45000000-50000000 --- rs181728325 48225429 0.000 0.144 1.000 0 -1 -1 -1
chr12-45000000-50000000 --- rs187216594 48225500 0.000 0.007 1.000 0 -1 -1 -1
がファイル2:METAL1.tblは、ヘッダを持っているタブが分離され、このようになります:
MarkerName Allele1 Allele2 Weight Zscore P-value Direction HetISq HetChiSq HetDf HetPVal
rs192072617 a g 2887.00 1.579 0.1143 ++ 0.0 0.032 1 0.8579
rs7929618 c g 2887.00 -1.416 0.1568 -+ 47.4 1.899 1 0.1681
rs181728325 t c 2887.00 1.469 0.1419 ++ 73.9 3.830 1 0.05033
rs7190157 a c 2887.00 1.952 0.05088 +- 72.7 3.669 1 0.05542
rs12364336 a g 2887.00 -1.503 0.1328 -+ 69.8 3.306 1 0.06902
rs187216594 t c 2887.00 -0.082 0.9349 +- 74.8 3.964 1 0.04649
rs12562373 a g 2887.00 -0.290 0.7717 -+ 0.0 0.150 1 0.6984
ファイルの行数が等しくない場合、最初のファイル(VDR.txt)は2番目のファイル(METAL1.tbl)よりもはるかに短くなります。
私がしたい:
- は、最初のファイル(VDR.txt)の3列と第二のファイル(METAL1.tbl)の第一列でこれらのファイルをマージします。
- 最初のファイル(VDR.txt)の列1,2,3および4と、2番目のファイル(METAL1.tbl)のすべての列のみを保持します。
- 最初のファイル(VDR.txt)の1列目からの最初のダッシュ
- 前に文字だけが特定の文字列(例えば「VDR」)を繰り返し、出力ファイルに新しい列を追加してください
- 出力ファイルにはヘッダーは付いていませんが、必要な場合は以下のようにしておくといいでしょう。
"-"
だから私は最後に、このような出力ファイル(output.txtと)持っていると思います。それが得るん
$ awk 'FNR==NR {a[$1]=$1" "$2" "$3" "$4" "$5;next}{print $3, gensub(/-.*/, "", $1), $4, $2, a[$3]}' METAL1.tbl VDR.txt
:これまで
gene MarkerName chr BP impute Allele1 Allele2 Weight Zscore P-value Direction HetISq HetChiSq HetDf HetPVal
VDR rs192072617 chr12 48225416 --- a g 2887 1.579 0.1143 ++ 0 0.032 1 0.8579
VDR rs181728325 chr12 48225429 --- t c 2887 1.469 0.1419 ++ 73.9 3.83 1 0.05033
VDR rs187216594 chr12 48225500 --- t c 2887 -0.082 0.9349 +- 74.8 3.964 1 0.04649
は私の試みをchr列と列は正しい方法で整列されますが、残念なことに、マージされたファイルではなく、VDR.txtから必要な列のみが出力されます。
これはかなり複雑な例であり、ご迷惑をおかけして申し訳ございませんが、ご了承ください。
おかげで、
メル
だから、これを解決しようとする試みを行いましたか?もしそうなら、あなたはこれを共有すべきです。 「ここに私の仕様はありますか、私のためにコードしてください」という形式の質問は、一般的によく受け取られていませんが、「ここに私のコードがあります。 – Carpetsmoker
ファイル内のフィールドはどのようにして識別されますか?固定幅ですか?またはデリミタは何ですか? –
データサンプルを4列程度に減らすことをお勧めします(根本的な問題を解決するのに十分です)。あなたはunix/linuxコマンド 'join'について知っていますか?区切られたデータ( '|'やタブのようなもの)を扱うことができれば、おそらく1行にすることができます。しかし、私はあなたの入力と出力を慎重に見ていません(それはあまりにも広すぎるため、間違っている可能性があります)。がんばろう。 – shellter