arrays - ksh 中的数组和分隔符
问题描述
我的命令的结果是:
> htnnpjhuhj.jbjbnljnkn:tcp:ssh xxx.12234.r444:44056
> ftpddddddd.jbfffdnkn:tcp:ssh xxx.122555.r674:44067
我试图在分隔符“:”之前只获取每行中的第一个元素,也就是说,我正在尝试获取htnnpjhuhj.jbjbnljnkn
and 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 的更多详细信息,以了解所需的输出以及以后是否/如何使用输出。