리눅스 간단한 awk 구분자 문제입니다.

bebes****@Naver의 이미지

리눅스 awk에서 구분자를 /*abc로 해서 앞부분만 출력하게 하고싶은데

awk '{FS="/*abc"}{print $1}' test.txt

라고 하면 abc는 삭제가 되는데

앞에 /* 는 그대로 남아있네요

/*도 함께 지워질수 있는 방법은 없을까요 ?

ymir의 이미지

$ cat a.txt
123/*abc456
1/2*345
12/*234abc
123*/345
$ cat a.txt | awk -F '/\*abc' '{print $1}'
123
1/2*345
12/*234abc
123*/345
$ cat a.txt | awk -F '[/\*abc]' '{print $1}'
123
1
12
123

--추가 수정--
위는 mawk 를 사용했을 때의 예시입니다.
gawk 를 쓰는 경우에는 \ 대신에 \\ 와 같이 써 주어야 합니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

bebes****@Naver의 이미지

awk: warning: escape sequence `\*' treated as plain `*' 가 발생하면서

완벽하게 삭제되지 않는 부분이 생기네요 음 ....

cjkjg;ajkldjek /*abc ejklrjakjklr 이렇게 되는것이

cjkjg;ajk 이렇게 되네요

ymir의 이미지

https://unix.stackexchange.com/questions/116537/awk-field-separator-bug

음.. \\* 과 같이 backslash 를 escape 시켜 주어야 하나 보네요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

bebes****@Naver의 이미지

발생했던

awk: warning: escape sequence `\*' treated as plain `*'

이 부분이 없어졌네요

감사합니다 :)

ymir의 이미지

https://www.gnu.org/software/gawk/manual/html_node/Escape-Sequences.html

gawk 에서는 FS 에 escape sequence 를 넣을 때, \ 가 literal 로 전달되게 하기 위해..
\\ 와 같이 한 번 더 escape 해서 넣어 주어야 하는군요.

맨 처음에 올린 것은.. gawk 가 아니라 mawk 였네요.
얘는 그냥 한 번만 써도 인식이 되나 봅니다.

무심코 썼다가 삽질했네요. ;;;

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』