이 형식의 대용량 파일이 있는데 헤더를 포함하여 처음 몇 줄을 보여드리겠습니다.
gene c1 c2 c3 c4 c5 c6 c7 c8
G1*1 0 0 0 0 0 0 0 0
G2*2 0 0 0 0 1 1 1 1
G3*3 0 0 2 2 44 44 62 62
G4*4 22 0 46 0 1308 7 1773 4
유전자의 첫 번째 행은 헤더 행입니다. 그대로 유지하고 나머지 줄을 FS = *로 분할하여 이제 이와 같은 파일을 출력으로 갖고 싶습니다.
gene coord c1 c2 c3 c4 c5 c6 c7 c8
G1 1 0 0 0 0 0 0 0 0
G2 2 0 0 0 0 1 1 1 1
G3 3 0 0 2 2 44 44 62 62
G4 4 22 0 46 0 1308 7 1773 4
따라서 헤더 행에 "coord"라는 추가 필드를 추가하여 후속 행을 분할할 때 모든 항목이 정렬되도록 하고 싶습니다.
awk를 사용하여 분할하는 방법을 알고 있지만 헤더 라인이 혼란스럽습니다.
awk -F '*' -v OFS="\t" '{print $1,$2}' ##This is for 2nd line and onwards
답변1
헤더 행은 특별한 경우이므로 그렇게 처리할 수 있습니다.
awk -F '*' -v OFS='\t' \
'NR == 1 { sub(/^gene/, "&" OFS "coord"); print; next }
{ print $1, $2 }'
답변2
awk
사용이 절대적인 요구사항 인가요 ? 이것은 직업처럼 보입니다 sed
.
sed '1s/gene/& coord/;2,$s/\*/ /'
이것은 자명하다:
1s/gene/& coord/
– 첫 번째 줄에서 "gene"을 "gene coord"로 변경합니다.2,$s/\*/ /
– 파일 끝 두 번째 줄에서 "*" 텍스트를 공백으로 변경합니다.
답변3
또 다른 접근 방식은 다음과 같습니다.
awk -F '[ \t*]' -v OFS='\t' 'NR==1{$2="coord\t"$2;print;next}{$1=$1}1' file
입력 파일이 명확하지 않아서 공백, 탭, 3개의 필드 구분 기호를 사용했습니다
*
. 이제 더 잘 입력하면 목록에서 항목을 제거할 수 있습니다.$1=$1
기본적으로 필드 재구성(모든 곳에서 새 필드 구분 기호 사용) 외에는 아무것도 수행하지 않습니다.Final은
1
수정된 모든 내용을 인쇄하는 데에만 사용됩니다.