我试图找到一个解决方案这问题。我想用于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
而不是,我得到的输出不是我想要实现的。我想要的输出是这样的print
awk
venkatvenkat3
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