Linux의 텍스트 파일에서 열 이름의 경로를 제거하는 방법은 무엇입니까?

Linux의 텍스트 파일에서 열 이름의 경로를 제거하는 방법은 무엇입니까?

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

그래서 전체 경로가 아닌 일곱 번째 열을 보면 마지막 열 앞에 이름만 표시하고 싶습니다 /. 원본 파일에는 이름이 다른 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에 검색하면 동일하고 사소한 내용을 말하는 백만 개의 답변이 있으며 이 포럼이나 다른 포럼의 모든 답변에서 반복할 가치가 없습니다.

답변2

이건 어때:

sed -Ei "s|/\S*/([^/]*)\.bam|\1|g" data.txt 
  • 다음으로 시작하는 문자열 찾기/
  • 공백이 아닌 문자의 수
  • 다른/
  • 그렇지 않은 사람들의 집단/
  • 에 의해. . 마치다.bam

그러한 문자열이 발견되면 첫 번째 그룹으로 바꾸십시오.

해당 문자열이 발견되지 않을 때까지 반복합니다.

관련 정보