私の現在のテキストファイルは次のとおりです。
VOG0005 - k141_44786_1 - 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2 -
VOG0005 - k141_46357_20 - 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3 -
VOG0010 - k141_1081_2 - 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2 -
VOG0010 - k141_17432_67 - 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1 -
VOG0010 - k141_2610_7 - 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1
コマンドはsort
ハイフンと中間スペースを別々の列として計算しますか?それでは、cut
そのコマンドを使用している間にハイフンをどのように削除できますか?
VOG0005 - k141_44786_1 - 4.9e-11
このようなものを手に入れよう
VOG0005 k141_44786_1 4.9e-11
つまり、1つのスペースだけが私に適しています。次のコマンドを試しましたが、cut -f2 File.txt
私の場合は動作しないようです。
誰でも助けることができますか?
答え1
sedコマンドを使用してspacからハイフンを削除できます。
sed 's/- //g'
以下の例を参照してください
# cat example.txt
VOG0005 - k141_44786_1 - 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2 -
VOG0005 - k141_46357_20 - 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3 -
VOG0010 - k141_1081_2 - 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2 -
VOG0010 - k141_17432_67 - 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1 -
VOG0010 - k141_2610_7 - 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1 -
# sed 's/- //g' example.txt
VOG0005 k141_44786_1 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2 -
VOG0005 k141_46357_20 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3 -
VOG0010 k141_1081_2 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2 -
VOG0010 k141_17432_67 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1 -
VOG0010 k141_2610_7 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1 -
答え2
と同様に、以下をsed
使用することもできますperl
。
$ cat File.txt | tr -s " " | perl -pe 's/[[:space:]]-//g' | sponge File.txt
VOG0005 k141_44786_1 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2
VOG0005 k141_46357_20 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3
VOG0010 k141_1081_2 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2
VOG0010 k141_17432_67 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1
VOG0010 k141_2610_7 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1
または
<File.txt tr -s " " | perl -pe 's/[[:space:]]-//g' | sponge File.txt
# on fish shell
tr -s " " <File.txt | perl -pe 's/[[:space:]]-//g' | sponge File.txt
説明する
tr -s " "
# Removes extra spaces
perl -pe 's/[[:space:]]-//g'
# Replaces any ' -' with nothing
sponge File.txt
# Reads standard input and writes it out to the specified file.
はっきりと使えますperl
(@ありがとうスティーブン・チャジェラス):
perl -pi -e 's/ +/ /g; s/[[:space:]]-//g' File.txt
同様にsed
:
sed -i -E 's/ +/ /g; s/[[:space:]]-//g' File.txt
説明については@Stéphane Chazelasのコメントをご覧ください。
答え3
まず、はい。sort
最初のものは列2として扱われ-
、最初のものはk141_xxxx
列3で、2番目は-
列4として扱われます。しかし、これは不完全な単純化です。真実は微妙で複雑です。
あなたの質問は完全にはっきりしていません。 2番目と4番目の列を破壊するには:
awk '{ $2=""; $4=""; print }' example.txt
ハイフンでフィールドを分離するには:
awk '{for (i=1; i<=NF; i++) if ($i == "-") $i = ""; print}' example.txt
awk
それは過剰です(しかしそうですperl
)。