![Linux의 텍스트 파일에서 열 이름의 경로를 제거하는 방법은 무엇입니까?](https://linux55.com/image/212594/Linux%EC%9D%98%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%97%B4%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%EA%B2%BD%EB%A1%9C%EB%A5%BC%20%EC%A0%9C%EA%B1%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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
그러한 문자열이 발견되면 첫 번째 그룹으로 바꾸십시오.
해당 문자열이 발견되지 않을 때까지 반복합니다.