質問があります。愚かな質問かもしれませんが、解決することはできません。ファイルの列を一致させ、ファイルをマージすることは非常に簡単であることを知っていますが、残念ながら、あまりにも多くのコマンドを試しても目標を達成できません。
ファイルが2つあります。
ファイル1:
BP2808 1.83684448966078 10.7449438228544 27.7057862093578 1.4123961881793E-07 4.26390957350344E-06
BP1319 2.75272032616902 8.74039675296892 27.5666097653874 1.51776372331745E-07 4.46142652354102E-06
dps 1.47015471230894 10.7061416142689 27.1494663323484 1.88317176247083E-07 5.39359707353824E-06
fusA -1.38504972563843 11.8361844791496 27.0016273796008 2.03284239943838E-07 5.67671240043168E-06
BP1320 2.67552497792458 8.77604324182685 26.5184193030292 2.61037278592442E-07 7.11167415092092E-06
2番目のファイルには2つの列があります。
ファイル2:
BP2808 hypothetical protein
BP1319 Memebrane protein
dps DNA-binding protein
fusA elongation factor G
希望の出力:
BP2808 1.83684448966078 10.7449438228544 27.7057862093578 1.4123961881793E-07 4.26390957350344E-06 hypothetical protein
BP1319 2.75272032616902 8.74039675296892 27.5666097653874 1.51776372331745E-07 4.46142652354102E-06 Memebrane protein
dps 1.47015471230894 10.7061416142689 27.1494663323484 1.88317176247083E-07 5.39359707353824E-06 DNA-binding protein
fusA -1.38504972563843 11.8361844791496 27.0016273796008 2.03284239943838E-07 5.67671240043168E-06 elongation factor G
BP1320 2.67552497792458 8.77604324182685 26.5184193030292 2.61037278592442E-07 7.11167415092092E-06 NA
私はawk、貼り付けようとしました。結合しましたが、目的の出力が得られませんでした。私の記憶が正しい場合は、ファイル3の最後の列にある文字列の間にスペースがあるためです。
paste File1 File2 | awk '{$2=""; print}' > Testing
awk -F\t '{getline f1 <"File1" ;print f1,$2}' OFS=, File2 > Testing
join -t'\t' <(sort File1) <(sort File2) > Testing
インターネットでたくさん検索してみると、もっと内容があります。誰でも私を助けることができれば時間が大幅に節約されます。
答え1
使用
join -t $'\t'
join
バックスペースエスケープ特殊文字は解釈されません。\t
実際には保持されます(タブと同じではありません)。\t
vsと非常に似ています(アナログがないかのように動作しますecho '\t'
echo -e '\t'
join
echo
-e
)。したがって、シェルに次の文字を使用して文字を解釈する必要があります。ANSI-Cの引用 $'...'
。
awk
〜する特殊文字を解釈するので、次のものを使用できます。
awk -F'\t'
しかし、
awk -F\t
\\t
しかし、 let the shellinterpret を使用することはできますが、\\
私の考えでは引用符が読みやすくなります。
後者のコマンドでは、シェルは(Try:)\t
として解釈されます。シェルが解釈されないように引用します。t
echo \t