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

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

printf대신에 사용하면 달성하고 싶지 않은 출력을 얻습니다 . 나는 다음과 같은 출력을 원한다.printawkvenkatvenkat3

venkat
venkat3

질문 2

해당 값을 다음과 같이 사용합니다.연관 배열또는 값이 실제로 열에 나타나는지 어떻게 알 수 있습니까 $1?

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

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

편집하다

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

답변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

관련 정보