【问题标题】:arrays and delimiters in kshksh 中的数组和分隔符
【发布时间】:2020-04-21 13:17:14
【问题描述】:

我的命令的结果是:

> 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]}

}

【问题讨论】:

  • 编辑 Q 以显示脚本的输出。看起来它应该工作。如果您收到任何错误消息,请在更新中包含确切的文本。祝你好运。

标签: arrays ksh delimiter


【解决方案1】:

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

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 提供更多关于所需输出的详细信息,以及稍后是否/如何使用输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2020-03-20
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多