바코드가 18열에 있는 텍스트 파일이 있습니다. 긴 문자열 예제를 얻기 위해 TCGA 바코드에서 마지막 16자를 제거하고 싶거나 열 18에 있는 문자열의 처음 12자를 새 열에 인쇄하고 싶습니다. 파일의 각 줄마다 문자가 다르기 때문에 단순히 sed 명령을 사용하여 특정 문자 뒤에 오는 문자를 삭제할 수는 없습니다.
예: TCGA-2E-A9G8-01A-11D-A403-09는 TCGA-2E-A9G8로 단축되어야 하며 단축된 ID는 새 열에 인쇄되어야 합니다.
다음과 같은 응답을 본 적이 있습니다: echo "${string:0:-16}" 저는 프로그래밍에 익숙하지 않아서 300,000개 이상의 행이 있고 특정 열로 전달되는 스프레드시트에 대해 이를 자동화하는 방법을 잘 모르겠습니다.
답변1
사용 awk
:
awk '{print substr($18,1,12)}' input
그러면 18열의 문자 1-12가 인쇄됩니다. 이는 텍스트 파일이 공백으로 구분되어 있다고 가정합니다. 하지만 아마도 그렇지 않을 것입니다.
CSV의 경우:
awk -F, '{print substr($18,1,12)}' input
이 출력을 새 열에 추가하는 Steeldriver의 의견에 따르면:
awk '{$(NF+1) = substr($18,1,12)} 1' input > output
불행히도 이로 인해 새 파일이 생성됩니다. gawk
파일을 수정하는 것이 가능하지만 가장 좋은 방법은 새 파일을 만든 다음 이전 파일을 삭제하는 것입니다.