删除awk显示中的空白行


10

我试图为这个问题找出解决方案。我想使用awk该解决方案。

我的输入文件如下所示。

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

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

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

但是,尽管上面的命令显示了正确的值,但是我的输出中却出现了空行。我有两个问题。

问题1

如何删除输出中的空白行,以便仅获得venkat和输出中的空白行venkat3

如果我使用printf的,而不是print我的awk,我得到venkatvenkat3的这不是我想要达到的输出。我想要这样的输出,

venkat
venkat3

问题2

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

我想实现这样的目标,

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

编辑

我没有注意到awkStephane 的解决方案。它在做我刚才提到的事情吗?


1
斯蒂芬(Stephane awk)没有做同样的事情。您的方法假设一个单词只有用分隔,才能包含在另一个单词中_。尽管对于OP的示例而言确实如此,但所有发布的答案也都处理,doglion而不仅限于dog_lion
terdon

Answers:


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

我需要显示,venkatvenkat3根据另一个问题中的操作要求。我正在尝试查找_我的$1专栏中是否存在之后的钥匙。
拉梅什2014年

哦,我已经更新了答案!
cuonglm 2014年

不错的解决方案。我认为您也应该在另一个问题中将此解决方案添加到您的解决方案中:)
Ramesh 2014年

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)2014年

6

问题1

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

问题2

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

不错的解决方案。我喜欢:)
Ramesh 2014年

对于问题2,我打算只获得venkatvenkat3作为输出,因为它们存在于中$1。但是,我会$1根据您的命令获取所有值。
拉梅什2014年

@Ramesh:作为您的描述,我认为您想获得第一栏中出现$2的条目$2。这是正确的吗?
cuonglm

@Gnouc,是的,你是对的。
拉梅什2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.