删除 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

如果我在 my 中使用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

对于问题 1,您可以使用--only-delimited( -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

相关内容