2017-10-11 6 views
1

次のように私はファイルを持っている間の数のGSUBを使う:私は2「_」の間の数字を削除する。すなわち2つの文字

HNRNPF-human_SRA:SRR442174_ENCFF938GRX.fastq.gz 
RBFOX2-human_SRA:SRR4421654_ENCFF187PBG.fastq.gz      
U2AF2-human_SRA:SRR3469570_ENCFF158ZML.fastq.gz 
HNRNPK-human_SRA:SRR3469488_ENCFF267TVR.fastq.gz 
RBFOX2-human_SRA:SRR4421654_ENCFF588WPC.fastq.gz      
U2AF2-human_SRA:SRR3469570_ENCFF550GXB.fastq.gz 

HNRNPF-human_SRA:SRR4421749_1_ENCFF938GRX.fastq.gz 
RBFOX2-human_SRA:SRR4421654_1_ENCFF187PBG.fastq.gz      
U2AF2-human_SRA:SRR3469570_1_ENCFF158ZML.fastq.gz 
HNRNPK-human_SRA:SRR3469488_2_ENCFF267TVR.fastq.gz 
RBFOX2-human_SRA:SRR4421654_1_ENCFF588WPC.fastq.gz      
U2AF2-human_SRA:SRR3469570_1_ENCFF550GXB.fastq.gz 

を、私はそれらを再ラベル付けしたいと思います、私はGSUBとスプリットのような別のコマンドをしようとしますが、私ができる唯一のsplitコマンドでされました:

name=U2AF2-human_SRA:SRR3469570_1_ENCFF158ZML.fastq.gz 
    echo $name | awk '{split($0, arr, "[__]"); print arr[3]}' 

答えて

2

awkソリューション。 (_に置き換える)あなたの文字列からすべての_<digit>_を削除するには

$ awk -F_ -v OFS=_ '{print $1,$2,$4}' file 
HNRNPF-human_SRA:SRR4421749_ENCFF938GRX.fastq.gz 
RBFOX2-human_SRA:SRR4421654_ENCFF187PBG.fastq.gz 
U2AF2-human_SRA:SRR3469570_ENCFF158ZML.fastq.gz 
HNRNPK-human_SRA:SRR3469488_ENCFF267TVR.fastq.gz 
RBFOX2-human_SRA:SRR4421654_ENCFF588WPC.fastq.gz 
U2AF2-human_SRA:SRR3469570_ENCFF550GXB.fastq.gz 
1

を、簡単なsed代替が行います:これが行います

$ sed 's/_[0-9]_/_/g' file 
2

awkを使用する:

$ name="U2AF2-human_SRA:SRR3469570_1_ENCFF158ZML.fastq.gz" 
$ awk 'sub(/_[0-9]+_/,"_")' <<<"$name" 
U2AF2-human_SRA:SRR3469570_ENCFF158ZML.fastq.gz 

変数に保存する:

$ myvar=$(awk 'sub(/_[0-9]+_/,"_")' <<<"$name") 
$ echo "$myvar" 

やbashの文字列置換

$ name="U2AF2-human_SRA:SRR3469570_1_ENCFF158ZML.fastq.gz" 
$ echo "${name/_[0-9]*_/_}" 
U2AF2-human_SRA:SRR3469570_ENCFF158ZML.fastq.gz