データセット内の他のすべての列/データを維持しながら、データセットの1つの列を2つの列に分割したいと思います。
たとえば、私のデータは次のようになります(...より多くの列を表し、データセットが非常に大きい)。
Gene qval ... Chromosome Position
ACE 0.3748 ... 1:234689650
NOS 0.2 ... 2:374896578
BRCA 0.345 ... 12:897655323
:
染色体位置に基づいて染色体位置の列を次のように分割したいと思います。
Gene qval ... Chromosome Position
ACE 0.3748 ... 1 234689650
NOS 0.2 ... 2 374896578
BRCA 0.345 ... 12 897655323
これまでに試したことは、新しい列を作成しないか、データセットの残りの部分を破損して混乱したり、所定の位置から外れて、最初の列が奇妙なChromsome
染色体番号で表示されるようにするようですが、より大きなPosition
数字(2番目の列I)を作成しようとしましたが、消えます。負けました。
たとえば、私は3つの方法を試しました。
awk 'sub(/\:/," "){$1=$1}1' OFS="\t" file1.txt > file2.txt #displaces columns and removes position column
tr ':' $' ' < file1.txt > file2.txt #removes : but doesn't divide into 2 columns
sed 's/:/ /g' < file1.txt > file2.txt #removes : but doesn't divide into 2 columns
同様の質問に基づいてこのようなコードを試しましたが、ほとんどは列を区切り文字に分割するのではなく、列を半分に切り、下半分を新しい列に移動したいと思います。
私のデータはタブ区切りのファイルにあります。私はLinuxに初めて遭遇したので間違っているかもしれませんが、私のコードは、タブsed
区切りtr
文字で数字の間に新しく配置されたスペースを考慮すると、分割が完了したことを示すコマンドが必要なので、新しい列として扱われますか?
答え1
ミラーの使用(https://github.com/johnkerl/miller)と実行
mlr --tsv nest --explode --values --across-fields --nested-fs ":" -f "Chromosome Position" \
then rename "Chromosome Position_1",Chromosome,"Chromosome Position_2",Position input.tsv >output.tsv
あなたはやる
+------+--------+------------+-----------+
| Gene | qval | Chromosome | Position |
+------+--------+------------+-----------+
| ACE | 0.3748 | 1 | 234689650 |
| NOS | 0.2 | 2 | 374896578 |
| BRCA | 0.345 | 12 | 897655323 |
+------+--------+------------+-----------+
答え2
答え3
コロンを空白に置き換えることに加えて、最初のアプローチにはどのような問題がありますか<TAB>
?適応してみてください:
awk '{sub (/:/, OFS)} 1' OFS="\t" file