awk 디스플레이에서 빈 줄 제거

awk 디스플레이에서 빈 줄 제거

해결책을 찾으려고 노력 중이에요이것질문. 솔루션 으로 사용하고 싶습니다 awk.

내 입력 파일은 다음과 같습니다.

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

아래와 awk같이 명령을 사용하여 두 번째 값을 추출합니다 ._

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

그러나 위 명령은 올바른 값을 인쇄하지만 출력에는 빈 줄이 표시됩니다. 질문이 2개 있습니다.

질문 1

venkat출력에서 합계 만 얻을 수 있도록 출력에서 ​​빈 줄을 제거하려면 어떻게 해야 합니까 ?venkat3

내 에서 printf대신 사용하면 내가 얻는 출력은 내가 원하는 결과가 아닙니다. 내가 원하는 출력은 이것이다printawkvenkatvenkat3

venkat
venkat3

질문 2

이 값을 다음과 같이 사용하십시오.연관 배열아니면 이러한 값이 실제로 $1열에 나타나는지 어떻게 알 수 있습니까?

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

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

편집하다

awk나는 Stephen의 해결책을 눈치 채지 못했습니다 . 내가 언급한 것과 같은 일을 하고 있나요?

답변1

또 다른 방법:

질문 1

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

$2정의된 경우에만 인쇄됩니다. 더 짧게 작성하는 방법은 다음과 같습니다.

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

질문 2

추가할 사항이 없습니다.

답변2

질문 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

답변3

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

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

답변4

질문 1

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

질문 2

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

관련 정보