file
다음과 같이 탭으로 구분 되어 있습니다.
$ cat file
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558474.1 1155234 1156286 polyketide synthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558475.1 1156298 1156807 12 carboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558476.1 1156804 1157820 -3 oxidoreductase [Mycobacterium]
여기서 1155234
, 1156286
, 1156298
, 1156807
, 1156804
및 1157820
탭 하였다 (즉, 파일의 공백 여섯 번째 (마지막) 열에 제외 없다). 0
다섯 번째 열에 탭 을 추가 하고 첫 번째 줄의 여섯 번째 열 끝에있는 탭을 공백으로 바꾸고 싶습니다 . 출력은 다음과 같습니다.
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558474.1 1155234 1156286 0 polyketide synthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558475.1 1156298 1156807 12 carboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558476.1 1156804 1157820 -3 oxidoreductase [Mycobacterium]
awk 또는 sed를 사용하여 어떻게합니까?
당신의 대답은 본질적으로 당신이 원하는 것을 할 수 있지만 개선 될 수 있습니다.
이유 내에서 (단순) 명령 수와 파이프 수를 최소화하려고합니다. 필요한 것보다 더 많이 보유하는 것은 비효율적 일 수 있습니다. 5 ~ 10 줄의 파일에서는 눈치 채지 못하지만, 백만 줄의 파일을 처리하면 차이를 만들 수 있습니다.
두 개의 sed
명령 을 실행할 필요가 없습니다 (하나는 다른 명령으로 파이프 됨). 넌 할 수있어
-e '나오지 (제 1 의 명령) '-e (제 의 명령) '또는
'나오지 (제 1 의 커맨드) ; (제 의 명령) '
s/\t/ /
명령 앞에 1
.s/…/…/6g
정의되지 않았습니다. 당신이 원하는 때문에 s/\t/ /
(6 탭) 한 번만 수행하면됩니다, 당신은 단지 말을해야 s/\t/ /6
합니다 (없이 g
).그래서 당신의 명령은
sed '1s / \ t / \ t0 \ t / 4; 1s / \ t / / 6 ' 파일
중괄호를 사용하면 함께 수행 할 명령을 그룹화 할 수 있습니다. 그래서 당신은 또한 말할 수 있습니다
sed '1 {s / \ t / \ t0 \ t / 4; s / \ t / / 6} ' 파일
다음과 같이 awk에서이를 수행 할 수 있습니다.
awk -F '\ t'-v OFS = '\ t' 'NR == 1 {$ 6 = $ 5 ""$ 6; $ 5 = "0"} {print} ' 파일
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다