删除 awk 显示中的空行

Ram*_*esh 11 awk

我试图找出这个问题的解决方案。我想awk用于解决方案。

我的输入文件如下所示。

-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
Run Code Online (Sandbox Code Playgroud)

我使用awk命令来提取第二个值_,如下所示。

awk -F "_" '{print $2}' file
Run Code Online (Sandbox Code Playgroud)

但是,虽然上面的命令打印了正确的值,但我的输出中却出现了空行。我有2个问题。

问题 1

如何删除输出中的空行,以便只获得venkatvenkat3输出?

如果我在 my 中使用printf而不是,我会得到我不想实现的输出。我想要这样的输出,printawkvenkatvenkat3

venkat
venkat3
Run Code Online (Sandbox Code Playgroud)

问题2

使用这些值作为关联数组或其他东西,我如何找到这些值是否实际出现在$1列中?

我想实现类似的目标,

awk -F "_" '$2==1{print $1}' file
Run Code Online (Sandbox Code Playgroud)

编辑

我没有注意到awk斯蒂芬的解决方案。它是在做我提到的同样的事情吗?

ter*_*don 10

另一种方法:

问题 1

awk -F_ '$2{print $2}' file
Run Code Online (Sandbox Code Playgroud)

这只会在$2定义时打印。这是一种较短的写作方式:

awk -F_ '{if($2){print $2}}' file
Run Code Online (Sandbox Code Playgroud)

问题2

不要添加任何尚未解决的内容。


cuo*_*glm 9

问题1

$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3
Run Code Online (Sandbox Code Playgroud)

问题2

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


iru*_*var 8

对于问题 1,您可以使用--only-delimited( -s) 选项cut

cut -s -f2 -d'_' file
venkat
venkat3
Run Code Online (Sandbox Code Playgroud)


Hau*_*ing 6

问题 1

awk -F "_" '/_/ {print $2}' file
Run Code Online (Sandbox Code Playgroud)

问题2

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