다음 데이터 세트가 있습니다.
CHROM POS N_ALLELES N_CHR {ALLELE:FREQ} 6 85401233 2 46 T:1 A:0 6 85401234 2 46 C:1 G:0 6 85401235 2 46 T:1 G:0
5열의 헤더를 변경한 후 2열로 나누고 싶습니다.
REF ALT T:1 A:0 C:1 G:0 T:1 G:0
sed를 사용하여 ':'을 탭 구분 기호로 변환할 수 있습니다. 효과가있다
sed '1s/\:/\t/g' filename
하지만 이 명령은 내가 원하는 대로 작동하지 않습니다.
sed '1s/\{ALLELE:/ALT\t/g' filename
다음 메시지를 제공합니다.
sed: -e expression #1, char 20: Invalid preceding regular expression
그리고
sed '1s/\:/\t/g' | '1s/\{ALLELE/REF /g' filename
-bash: 1s/\{ALLELE/REF /g: No such file or directory
답변1
파일의 내용을 수정하려면 ed
표준 편집기가 필요합니다.
$ cat filename
CHROM POS N_ALLELES N_CHR {ALLELE:FREQ}
6 85401233 2 46 T:1 A:0
6 85401234 2 46 C:1 G:0
6 85401235 2 46 T:1 G:0
$ printf '%b\n' '1s/{ALLELE:FREQ}/REF\011ALT/' 'w' 'q'|ed -s filename
$ cat filename
CHROM POS N_ALLELES N_CHR REF ALT
6 85401233 2 46 T:1 A:0
6 85401234 2 46 C:1 G:0
6 85401235 2 46 T:1 G:0
'1s/{ALLELE:FREQ}/REF\011ALT/'
1행으로 이동하여 대체합니다.\011
tab 으로 변환된 탭 문자의 8진수 표현입니다printf
.'w' 'q'
파일에 대한 변경 사항을 저장하고 편집기를 종료합니다.
sed '1s/\{ALLELE:/ALT\t/g' filename
\{
기본 정규 표현식이 특별하기 때문에 실패합니다 . 당신이 의미하는 바는 간단합니다 {
.
그리고 여기
sed '1s/\:/\t/g' | '1s/\{ALLELE/REF /g' filename
첫 번째 sed에 입력 파일을 제공하지 않았으므로 실패했습니다. 정확하고 직접적인 sed 명령은 다음과 같습니다.
sed '1s/{ALLELE:FREQ}/REF\tALT/' filename
해당 플래그도 필요 g
하지 않습니다. 줄에 교체해야 하는 일치 항목이 하나만 있습니다.