data.txt
次のタブで区切られたテキストファイルがあります。
# Program used for this
Geneid Chr Start End Strand Length /users/doc3/data/Q0062/input/HPR4/HPR4.bam /users/doc3/data/Q0062/input/HPR5_ctrl/HPR5_ctrl.bam /users/doc3/data/Q0062/input/HPR6/HPR6.bam
ENSG00000224571.1 GL000008.2 5072 5352 - 281 0 0 0
ENSG00000226369.1 GL000008.2 20450 20767 + 318 0 0 0
ENSG00000280961.1 GL000008.2 24985 25272 + 288 0 0 0
ENSG00000227871.1 GL000008.2 43499 43703 + 205 0 0 0
ENSG00000251917.1 GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2 83529;83927;84030;85457;85567;85567;85593;88636;88636;173516;173838 83545;84145;84145;85477;85625;85625;85625;88789;88789;173643;173931 +;+;+;+;+;+;+;+;+;+;+ 692 0 3 2
ENSG00000231423.1 GL000008.2 115523 115813 + 291 0 0 5
ENSG00000228465.1 GL000008.2 119026 119424 + 399 11 4 7
ENSG00000232585.1 GL000008.2 120703 120999 + 297 5 0 0
ENSG00000234081.1 GL000008.2;GL000008.2 124725;153003 124857;153715 +;+ 846 2 1 0
ENSG00000172352.5 GL000008.2 130736 131045 + 310 4 2 1
必要な出力は次のようになります。
# Program used for this
Geneid Chr Start End Strand Length HPR4 HPR5_ctrl HPR6
ENSG00000224571.1 GL000008.2 5072 5352 - 281 0 0 0
ENSG00000226369.1 GL000008.2 20450 20767 + 318 0 0 0
ENSG00000280961.1 GL000008.2 24985 25272 + 288 0 0 0
ENSG00000227871.1 GL000008.2 43499 43703 + 205 0 0 0
ENSG00000251917.1 GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2 83529;83927;84030;85457;85567;85567;85593;88636;88636;173516;173838 83545;84145;84145;85477;85625;85625;85625;88789;88789;173643;173931 +;+;+;+;+;+;+;+;+;+;+ 692 0 3 2
ENSG00000231423.1 GL000008.2 115523 115813 + 291 0 0 5
ENSG00000228465.1 GL000008.2 119026 119424 + 399 11 4 7
ENSG00000232585.1 GL000008.2 120703 120999 + 297 5 0 0
ENSG00000234081.1 GL000008.2;GL000008.2 124725;153003 124857;153715 +;+ 846 2 1 0
ENSG00000172352.5 GL000008.2 130736 131045 + 310 4 2 1
したがって、フルパスではなく7番目の列を見ると、最後の列の前に名前だけを表示したいと思います/
。元のファイルには異なる名前の100列があります。
新しいファイルを作成したくないが、data.txt
同じファイルを変更したい。どうすればいいですか?
答え1
awkを使用して例に示されているテキストを操作する方法は次のとおりです。
$ awk 'BEGIN{FS=OFS="\t"} NR==2{ for (i=1; i<=NF; i++) { sub("/[^/]*$","",$i); sub(".*/","",$i) } } 1' file
# Program used for this
Geneid Chr Start End Strand HPR4 HPR5_ctrl HPR6
ENSG00000224571.1 GL000008.2 5072 5352 - 281 0 0 0
ENSG00000226369.1 GL000008.2 20450 20767 + 318 0 0 0
ENSG00000280961.1 GL000008.2 24985 25272 + 288 0 0 0
ENSG00000227871.1 GL000008.2 43499 43703 + 205 0 0 0
ENSG00000251917.1 GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2 83529;83927;84030;85457;85567;85567;85593;88636;88636;173516;173838 83545;84145;84145;85477;85625;85625;85625;88789;88789;173643;173931 +;+;+;+;+;+;+;+;+;+;+ 692 0 3 2
ENSG00000231423.1 GL000008.2 115523 115813 + 291 0 0 5
ENSG00000228465.1 GL000008.2 119026 119424 + 399 11 4 7
ENSG00000232585.1 GL000008.2 120703 120999 + 297 5 0 0
ENSG00000234081.1 GL000008.2;GL000008.2 124725;153003 124857;153715 +;+ 846 2 1 0
ENSG00000172352.5 GL000008.2 130736 131045 + 310 4 2 1
または必要に応じて:
$ awk 'BEGIN{FS=OFS="\t"} NR==2{ for (i=1; i<=NF; i++) if ( (n=split($i,a,"/")) > 1 ) $i=a[n-1] } 1' file
# Program used for this
Geneid Chr Start End Strand HPR4 HPR5_ctrl HPR6
ENSG00000224571.1 GL000008.2 5072 5352 - 281 0 0 0
ENSG00000226369.1 GL000008.2 20450 20767 + 318 0 0 0
ENSG00000280961.1 GL000008.2 24985 25272 + 288 0 0 0
ENSG00000227871.1 GL000008.2 43499 43703 + 205 0 0 0
ENSG00000251917.1 GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2;GL000008.2 83529;83927;84030;85457;85567;85567;85593;88636;88636;173516;173838 83545;84145;84145;85477;85625;85625;85625;88789;88789;173643;173931 +;+;+;+;+;+;+;+;+;+;+ 692 0 3 2
ENSG00000231423.1 GL000008.2 115523 115813 + 291 0 0 5
ENSG00000228465.1 GL000008.2 119026 119424 + 399 11 4 7
ENSG00000232585.1 GL000008.2 120703 120999 + 297 5 0 0
ENSG00000234081.1 GL000008.2;GL000008.2 124725;153003 124857;153715 +;+ 846 2 1 0
ENSG00000172352.5 GL000008.2 130736 131045 + 310 4 2 1
出力を含む同じ入力ファイル名で終わる場合、Googleで検索すると、同じで些細なことを言う100万の回答があり、このフォーラムまたは他のフォーラムのすべての回答で繰り返す価値はありません。
答え2
これはどうですか:
sed -Ei "s|/\S*/([^/]*)\.bam|\1|g" data.txt
- 次に始まる文字列を探す
/
- 空白以外の文字数
- その他
/
- そうでない人の集団
/
- によって。 。終わる
.bam
そのような文字列が見つかったら、最初のグループに置き換えます。
その文字列が見つからないまで繰り返します。