以下のファイルがあります。列9の値は**につながります。
chrXV 234346 234546 snR81 + SNR81 chrXV 234357 0.0003015891774815342**0.131826816475 +
chrXV 234346 234546 snR81 + SNR81 chrXV 234385 0.0002208827994288481**0.0118547789578 +
chrXV 234346 234546 snR81 + SNR81 chrXV 234396 0.0001799579220002955**0.00583993781634 +
chrXV 234346 234546 snR81 + SNR81 chrXV 234410 0.003451057940295026**0.00352844797952 +
2つの値を別々の列として持つことができる出力が必要です。 awkでこれを行う方法。
これが私が望む出力です。出力の最初の行を表示します。
chrXV 234346 234546 snR81 + SNR81 chrXV 234357 0.0003015891774815342 0.131826816475 +
答え1
人々がなぜcatを使ってファイルをawkにパイプするのかはわかりませんが、tr応答は1文字だけが別の文字に変換されるため、すべての文字*
はspace
.
シンプルなawkソリューション
awk -F"**" '$1=$1' OFS="\t" file
すべてのフィールド間のタブの場合
awk 'sub(/\*\*/," "){$1=$1}1' OFS="\t" file
まだ一つあります。
awk 'gsub(/(*| )+/,"\t")' file
sed コマンド
sed 's/[* ]\+/\t/g' file
trコマンド
tr -s '* ' '\t' < file
答え2
奇妙なことだと言うべきですか?cat file | tr '**' ' '
**を空白の3つに置き換えるとどうなりますか?
答え3
cat text.txt |awk '{ split($9,a , "**"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",$1,$2,$3,$4,$5,$6,$7,$8, a[1], a[2],$10); }'
出力は次のとおりです
chrXV 234346 234546 snR81 + SNR81 chrXV 234357 0.0003015891774815342 0.131826816475 +
chrXV 234346 234546 snR81 + SNR81 chrXV 234385 0.0002208827994288481 0.0118547789578 +
chrXV 234346 234546 snR81 + SNR81 chrXV 234396 0.0001799579220002955 0.00583993781634 +
chrXV 234346 234546 snR81 + SNR81 chrXV 234410 0.003451057940295026 0.00352844797952 +
答え4
awk -F'**' 'BEGIN{OFS=" ";} {print $1,$2}' file
'**'を区切り文字として使用し、3つのスペースを出力区切り文字に設定します。