文字列の抽出、検索、置換、または抽出された値を含む長い文字列を保持する

文字列の抽出、検索、置換、または抽出された値を含む長い文字列を保持する

編集する必要がある入力ファイルは次のとおりです(より多くの行がある場合があります)。

bundle_id   target_id   length  eff_length  tot_counts  uniq_counts est_counts  eff_counts  ambig_distr_alpha   ambig_distr_beta    fpkm    fpkm_conf_low   fpkm_conf_high  solvable    tpm
1   intron_FBgn0035847:4_FBgn0035847:3  61  0   0   0   0   0   0.00E+00    0.00E+00    0.00E+00    0.00E+00    0.00E+00    F   0.00E+00
2   intron_FBgn0032515:2_FBgn0032515:4  72  0   0   0   0   0   0.00E+00    0.00E+00    0.00E+00    0.00E+00    0.00E+00    F   0.00E+00
3   intron_FBgn0266486:5_FBgn0266486:4  58  0   0   0   0   0   0.00E+00    0.00E+00    0.00E+00    0.00E+00    0.00E+00    F   0.00E+00
4   intron_FBgn0031359:10_FBgn0031359:7 4978    1430.739479 91  0   30.333333   105.539363  1.00E+00    1.00E+00    6.30E+00    1.77E+00    1.08E+01    F   1.42E+01
4   intron_FBgn0031359:10_FBgn0031359:8 4978    1430.739479 91  0   30.333333   105.539363  1.00E+00    1.00E+00    6.30E+00    1.77E+00    1.08E+01    F   1.42E+01
4   intron_FBgn0031359:10_FBgn0031359:9 4978    1430.739479 91  0   30.333333   105.539363  1.00E+00    1.00E+00    6.30E+00    1.77E+00    1.08E+01    F   1.42E+01
536 intron_CR31143:1_CR31143:2  40  0   0   0   0   0   0.00E+00    0.00E+00    0.00E+00    0.00E+00    0.00E+00    F   0.00E+00

2番目の列の各IDについてIntron_XXXXXXXX:X_XXXXXXXX:Xの間の文字列を抽出したいイントロン_そして最初:(文字列の間は通常FBgnで始まりますが、必ずしもそうではありません)。

次に、次のリストがあります。FBGNそしてFBgnを変換したいその名前を持つ別の列:

## FlyBase Gene Mapping Table   
## Generated: Fri Dec 20 12:37:29 2013  
## Using datasource: dbi:Pg:dbname=fb_2014_01_reporting;host=flysql9;port=5432...   
FBgn0035847 mthl7
FBgn0032515 loqs
FBgn0266486 CG45085
FBgn0031359 CG18317

次に、リストの最初の列から抽出された文字列を検索したいと思います。

抽出された文字列の2番目の列にその値がある場合は、ID全体を置き換えたいと思います。Intron_FBgnXXXXXX:X_FBgnXXXXXX:X2番目の列には対応する名前があります。

抽出された文字列が最初の列に存在しない場合は、ID全体を置き換えたいと思います。Intron_XXXXXXXX:X_XXXXXXXX:X抽出された文字列として。

次のスクリプトがあります。

ref="gene_map_table_fb_2014_01_short.tsv"
target="HC25_LNv_ZT02_intron_results.txt"
output="temptemp.txt"

declare -A map
while read line
do
if [[ ! -z "$line" ]] && [[ ! "$line" =~ ^#.* ]]
then
key=$(echo "$line" | cut -f 1)
value=$(echo "$line" | cut -f 2)
map[$key]=$value
fi
done < $ref

while read line
do
  key=$(echo "$line" | sed -n 's/.*_\([^\.]*\)\:.*/\1/p' | head -1)
if [ ! -z "$key" ]
then
  echo "$line" | sed 's/intron_[^[:space:]]*/'${map[$key]}'/g' >> $output
else
  echo "$line" | sed 's/intron_[^[:space:]]*/'$key'/g' >> $output
fi
done < $target

出力ファイルにFBgnで始まらないIDを含む行が欠落していることを除いて、すべてがうまくいくようです。

ベストアンサー1

できます:

cat gene_map_table_fb_2014_01_short.tsv  |sed '1d' |awk {'print $2'} |awk 'BEGIN{FS=":"} {print $2}' |sed s/._//g

最初にファイルを分類し、最初の行(d1を含む列ヘッダー)を削除し、すべての列を印刷してから区切り、4_FBgn0035847削除します。awk 'BEGIN{FS=":"} {print $2}'number_sed s/._//g

出力は次のとおりです

FBgn0035847
FBgn0032515
FBgn0266486
1FBgn0031359
1FBgn0031359
1FBgn0031359
CR31143

ただし、終了行が重複して削除される場合は、次のことができます。

cat gene_map_table_fb_2014_01_short.tsv  |sed '1d' |awk {'print $2'} |awk 'BEGIN{FS=":"} {print $2}' |sed s/._//g |sed '$d'

したがって、出力は次のようになります。

FBgn0035847
FBgn0032515
FBgn0266486
1FBgn0031359
1FBgn0031359
1FBgn0031359

おすすめ記事