[英]arrays and delimiters in ksh
我的命令的结果是:
> htnnpjhuhj.jbjbnljnkn:tcp:ssh xxx.12234.r444:44056
> ftpddddddd.jbfffdnkn:tcp:ssh xxx.122555.r674:44067
我试图在分隔符“:”之前只获取每一行中的第一个元素,也就是说,我试图获取htnnpjhuhj.jbjbnljnkn
和ftpddddddd.jbfffdnkn
。 请告诉我下面的代码有什么问题。
function myfunc
{
command=$(command)
IFS=":" read -rA RESULTS <<< $command
echo ${RESULTS[0]}
}
假设所需的输出如下所示:
htnnpjhuhj.jbjbnljnkn
ftpddddddd.jbfffdnkn
有几种方法可以实现这一点...... cut
, sed
, awk
......问题中提到的基于数组的解决方案。
我不清楚(对我来说)这个函数将如何使用,所以我将看一些更直接的东西。
这是一个awk
解决方案,它根据两个可能的分隔符之一( space
和:
)解析输入:
$ cat rawdata
> htnnpjhuhj.jbjbnljnkn:tcp:ssh xxx.12234.r444:44056
> ftpddddddd.jbfffdnkn:tcp:ssh xxx.122555.r674:44067
$ awk -F"[ :]" '{print $2}' rawdata
htnnpjhuhj.jbjbnljnkn
ftpddddddd.jbfffdnkn
如果打算将所有值放在一行中,那么我们可以在awk
代码中添加更多内容,如下所示:
$ awk -F"[ :]" '{printf $2" "} END {printf "\n"}' rawdata
htnnpjhuhj.jbjbnljnkn ftpddddddd.jbfffdnkn
注意:这确实在输出的末尾放置了一个额外的空间。
同样,有很多方法可以对此进行切片,但我们需要来自 OP 的更多详细信息,以了解所需的输出以及稍后是否/如何使用输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.