awk 표시에서 빈 줄 제거


10

질문에 대한 해결책을 찾으려고 노력했습니다 . awk솔루션 에 사용 하고 싶었습니다 .

입력 파일은 아래와 같습니다.

-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4

I 사용 awk후 초 값을 추출 명령을 _아래와 같이.

awk -F "_" '{print $2}' file

그러나 위의 명령이 올바른 값을 인쇄하지만 출력에 빈 줄이 나타납니다. 두 가지 질문이 있습니다.

질문 1

어떻게 난 단지 얻을 수 있도록 출력에 빈 줄을 제거 할 수 있습니다 venkatvenkat3출력에?

내가 사용하는 경우 printf대신 print내에서 awk, 나는 얻을 venkatvenkat3내가 달성하기 위해 원하지 않는 출력한다. 나는 출력을 원한다.

venkat
venkat3

질문 2

이러한 값을 연관 배열 또는 무언가 로 사용하여 실제로 값이 $1열 에서 발생하는지 어떻게 알 수 있습니까?

나는 다음과 같은 것을 성취하고 싶었습니다.

awk -F "_" '$2==1{print $1}' file

편집하다

나는 awkStephane 의 해결책을 보지 못했습니다 . 내가 언급 한 것과 똑같은 일을하고 있습니까?


1
스테판 awk은 같은 일을하지 않습니다. 귀하의 접근 방식은 단어가로 분리 된 경우에만 다른 단어에만 포함될 수 있다고 가정합니다 _. OP의 예에서는 그렇지만 게시 된 모든 답변은와 같은 경우뿐만 아니라 처리 doglion합니다 dog_lion.
terdon

답변:


8

질문 1

$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3

질문 2

$ awk -F _ '
    NR == FNR {a[$1];next}
    ($2 in a) {print $2}
' file file
venkat
venkat3

나는 표시해야 venkat하고 venkat3영업 이익에 따라 다른 질문을 물었다. 이후 키 _$1열에 있는지 확인하려고합니다 .
Ramesh

아, 대답을 업데이트했습니다!
cuonglm

좋은 해결책. 나는 당신이 다른 질문에 당신의 솔루션에 이것을 추가해야한다고 생각합니다 :)
Ramesh

8

질문 1의 경우 --only-delimited( -s) 옵션을 사용할 수 있습니다cut

cut -s -f2 -d'_' file
venkat
venkat3

8

다른 접근법 :

질문 1

awk -F_ '$2{print $2}' file

$2정의 된 경우에만 인쇄됩니다 . 더 짧은 작성 방법입니다.

awk -F_ '{if($2){print $2}}' file

질문 2

아직 해결되지 않은 추가 할 내용이 없습니다.


1
질문 1에 대한 좋은 해결책. 짧고 또렷하다 :)
Ramesh

6

질문 1

awk -F "_" '/_/ {print $2}' file

질문 2

awk -F "_" '{values[$1]=1;}; END {for (val in values) print val;}' file

좋은 해결책. 나는 그것을 좋아한다 :)
Ramesh

question2를 들어, 난 단지 얻을 의도 venkatvenkat3그들이에 존재로 출력으로 $1. 그러나 나는 $1당신의 명령에 따라 모든 값을 얻습니다 .
Ramesh

@Ramesh : 당신의 설명으로, 나는 당신이 1 열에서 발생 $2하는 항목 을 얻고 싶다고 생각합니다 $2. 이게 옳은 거니?
cuonglm

@Gnouc, 그렇습니다.
Ramesh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.