【问题标题】:Seperate values with commas on one line from a variable BASH在变量 BASH 的一行中用逗号分隔值
【发布时间】:2013-10-07 14:14:30
【问题描述】:

我有一个bash 脚本,它将一些值存储在一个变量中,并将每个值输出到一个单独的行中,如下所示:

2288
87
183
30
16

我需要在一行中使用这种格式的值,以便我可以导出到CSV

2288, 87, 183, 30, 16

我在网上查看了一些使用sedawk 的示例,但找不到与我类似的示例

任何帮助将不胜感激

【问题讨论】:

    标签: bash csv sed awk comma


    【解决方案1】:

    paste是你的朋友:

    $ paste -s -d',' file
    2288,87,183,30,16
    

    您也可以使用trawk,但您会得到一个逗号:

    $ awk '{printf $0","}' file
    2288,87,183,30,16,
    
    $ tr -s '\n' ',' <file
    2288,87,183,30,16,
    

    更新

    它不是一个文件,它是一个我拥有的变量,它似乎在 一样吗?

    种类:

    $ myvar="2288
    87
    183
    30"
    $ echo "$myvar" | paste -s -d','
    2288,87,183,30
    $ echo "$myvar" | tr -s '\n' ', ' 
    2288,87,183,30,
    $ echo "$myvar" | awk '{printf $0","}'
    2288,87,183,30,
    

    【讨论】:

    • 它不是一个文件,它是一个变量,我有它似乎没有以同样的方式工作?
    【解决方案2】:

    或者您可以使用 bash 数组。将每个值放入数组中(我使用的是速记版本):

    declare -ai nums
    nums+=(2288)
    nums+=(87)
    nums+=(183)
    nums+=(30)
    nums+=(16)
    
    oldIFS="$IFS"
    IFS=','
    echo "${nums[*]}"
    IFS="$oldIFS"
    

    declare -ainums 声明为整数数组。然后我们依次将每个值附加到数组中(这些可能是变量)。将IFS 设置为逗号会更改默认输出分隔符。它还更改了默认输入分隔符,因此明智的做法是存储 IFS 的旧值,然后在完成后恢复它 (oldIFS)。

    【讨论】:

      【解决方案3】:

      awk 解决方案。

      awk '{$1=$1}1' RS= OFS=,
      2288,87,183,30,16
      

      这并没有给出此处发布的许多解决方案所具有的最终,

      【讨论】:

        【解决方案4】:

        sed 解决方案:

        sed ':a;N;$!ba;s/\n/, /g' file
        

        更多详情here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-19
          • 1970-01-01
          • 1970-01-01
          • 2023-02-22
          • 2020-02-05
          • 1970-01-01
          相关资源
          最近更新 更多