본문 바로가기

linux(리눅스)

sed와 awk 사용법

728x90
반응형

sed

파일에서 특정 문자열을 가진 line을 없애버리기
sed '/없애버릴 글자/d' 파일 > 결과물


만일 변수를 넣을 경우면 double quote를 사용해야함

sed "/$variable/d" "$files" > 결과물


파일에서 특정 행 (specific line number)를 제거하고 싶을 때,

sed -e '5,10d;12d' 파일

5번부터 10번까지와 12번을 제거할 때임.


파일에서 특정 행들을 추출하고 싶을 때,

sed -n 5,10p;12p 파일

5번부터 10번까지와 12번을 뽑을 때임


파일의 특정 line(row)에 삽입하고 싶을 때,

sed -i "15i 넣고싶은문자" Makefile.txt

-i : overwrite하란 소림

15 : 15번째 row(line)


파일 전체에서 특정 문자를 다른 걸로 바꾸고 싶을 때

sed 's/기존문자/다른문자/;s/기존문자2/다른문자2/'

여러 문자 바꿀 때는 세미콜론으로 구분해서 넣으면됨.


특정파일의 내용을 특정 line(row)에 삽입하고 싶을 때,

sed -i 2r파일이름 덮어씌울파일이름

2r : 3번 째 줄에 넣고 싶으면 2r을 하면 됨. 즉 원하는 line 수에 -1을 하면 됨.


파일에 새로운 column(열)을 만들고 거기에 문자 넣기

sed -i "s/$/\t넣고싶은글/" 파일


-i : overwrite하라는 의미임

s : substitution(교체) 하란 뜻임.
Perform a substitution with s/PATTERN/REPLACEMENT/. In this example PATTERN is $, the end of the line, and REPLACEMENT is \t (= a TAB), and $f is the filename, from the loop variable. The s/// command is within double-quotes so that the shell can expand variables.

https://unix.stackexchange.com/questions/117568/adding-a-column-of-values-in-a-tab-delimited-file



특정 열(column)에 접미사(suffix)를 붙이고 싶을 때,

sed 's/\t/$&/1' test > test2 && cut -f1 test2


\t : tab 구분자인 경우 이렇게 하고 space이면 space치면됨

$를 넣을 거고 &/1 은 1번 column을 의미함.


여러 개의 패턴으로 문자들을 지우고 싶을 때,

sed '/없애버릴 글자/d; /없애버릴 글자2/d' > 결과물

-i를 쓰면 overwite됨 길게 쓰면 몇 개든 지워짐



#------------- awk '

특정 열(column)에서 특정 character value를 갖는 것만 취하고 싶을 때,

awk -F '\t' '$26 == "Somatic"' TCGA.GBM.mutect.protected.maf > TCGA.GBM.mutect.somatic_proctected_v1.maf


-F : filed separater임. tab인 경우 '\t'를 넣어줘야함.

$몇번째 열인지

== Somatic 을 뽑고 싶을 때

숫자도 가능함 그런 경우 >= > < 등을 쓰면됨 그렇게 할 경우 값의 크기에 따라 뽑을 수 있음.


http://www.thegeekstuff.com/2009/11/unix-sed-tutorial-append-insert-replace-and-count-file-lines/?ref=driverlayer.com


특정 열 (column)에서 특정 character를 다른 것으로 바꾸고 싶을 때,

awk -F '\t' -v OFS='\t' '{ sub("-",".",$3); print }'

sub("바꿀 대상 문자열", "대체할 문자열", 항목변수)

-v OFS='\t' output의 separator를 어떻게 설정할지임.

http://bahndal.egloos.com/565881


728x90
반응형