繁体   English   中英

ksh 中的数组和分隔符

[英]arrays and delimiters in ksh

我的命令的结果是:

> htnnpjhuhj.jbjbnljnkn:tcp:ssh xxx.12234.r444:44056  
> ftpddddddd.jbfffdnkn:tcp:ssh xxx.122555.r674:44067

我试图在分隔符“:”之前只获取每一行中的第一个元素,也就是说,我试图获取htnnpjhuhj.jbjbnljnknftpddddddd.jbfffdnkn 请告诉我下面的代码有什么问题。

function myfunc 
{    
   command=$(command)
   IFS=":" read -rA RESULTS <<< $command
   echo ${RESULTS[0]}

}

假设所需的输出如下所示:

htnnpjhuhj.jbjbnljnkn
ftpddddddd.jbfffdnkn

有几种方法可以实现这一点...... cutsedawk ......问题中提到的基于数组的解决方案。

我不清楚(对我来说)这个函数将如何使用,所以我将看一些更直接的东西。

这是一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM