2016-05-21 5 views
0

私はawkを持っていますが、問題はあるようです。下のファイルで$5(で始まる場合、その文字列には)が最後に追加されます。しかし、if $ 5 does not start with athen nothing is done. The out is separated by a tab. The awk is almost right but I am not sure how to add the condition to only add aif the field starts with a( `ありがとうございました。フィールドが開始かっこで始まる場合、awkは閉じ括弧を追加します

ファイル

chr7 100490775 100491863 chr7:100490775-100491863 ACHE 
chr7 100488568 100488719 chr7:100488568-100488719 ACHE;DJ051769 
chr1 159174749 159174770 chr1:159174749-159174770 (ACKR1 
chr1 159175223 159176240 chr1:159175223-159176240 (ACKR1 

AWK電流出力

chr7 100490775 100491863 chr7:100490775-100491863 ACHE) 
chr7 100488568 100488719 chr7:100488568-100488719 ACHE;DJ051769) 
chr1 159174749 159174770 chr1:159174749-159174770 (ACKR1) 
chr1 159175223 159176240 chr1:159175223-159176240 (ACKR1) 

awk -v OFS='\t' '{print $1,$2,$3,$4,""$5")"}' file 

を試し所望の出力(ライン1及び2は何も行わないが、ライン3及び4は、最後に追加)を持っている)

chr7 100490775 100491863 chr7:100490775-100491863 ACHE 
chr7 100488568 100488719 chr7:100488568-100488719 ACHE;DJ051769 
chr1 159174749 159174770 chr1:159174749-159174770 (ACKR1) 
chr1 159175223 159176240 chr1:159175223-159176240 (ACKR1) 

答えて

2
$ awk -v OFS='\t' '{p = substr($5,1,1)=="(" ? ")" : ""; $5=$5 p}1' mp.txt 
chr7 100490775 100491863 chr7:100490775-100491863 ACHE 
chr7 100488568 100488719 chr7:100488568-100488719 ACHE;DJ051769 
chr1 159174749 159174770 chr1:159174749-159174770 (ACKR1) 
chr1 159175223 159176240 chr1:159175223-159176240 (ACKR1) 

5番目のフィールドの最初の文字を確認してください。 (の場合は末尾に)を追加し、それ以外の場合は空の文字列を追加します。

すべての場合にsomethingsのいずれかが「nothing」であるところを追加することで、定義された(タブ)出力セパレータでレコードを再構成するようにawkに強制して、個々のフィールドを印刷する必要がなくなります。末尾の1はalways-trueパターンとして機能し、そのデフォルトアクションは単に再構成された行を出力するだけです。

+0

ご協力いただきありがとうございます。 – Chris

関連する問題