【问题标题】:Change ouput for loop in bash在 bash 中更改循环的输出
【发布时间】:2020-01-27 12:29:03
【问题描述】:

我有这些数据:

2020-01-01-00-00
2020-01-01-06-00
2020-01-01-12-00
2020-01-01-18-00

我想这样显示这些数据:

[ 2020-01-01-00-00, 2020-01-01-06-00, 2020-01-01-12-00, 2020-01-01-18-00 ]

我试试这个:

for i in $(cat Test2.txt)
do
tr -d "\n" <<< $i," "
done

输出是:

2020-01-01-00-00, 2020-01-01-06-00, 2020-01-01-12-00, 2020-01-01-18-00,

那我试试:

for i in $(cat Test2.txt)
do
echo " [ `tr -d "\n" <<< "'$i'"," "` ]"
done

但输出是:

[ '2020-01-01-00-00',  ]
[ '2020-01-01-06-00',  ]
[ '2020-01-01-12-00',  ]
[ '2020-01-01-18-00',  ]

你能告诉我怎么做吗?

【问题讨论】:

  • 这是什么数据?你怎么得到这个?谁是这个格式化数据的接收者?了解这些信息将有助于我们提供更好、更有意义的解决方案

标签: bash loops for-loop


【解决方案1】:

Don't read lines with for.

一种常见的安排是使用在第一次迭代后更改的分隔符前缀。

prefix='['
while read -r line; do
    printf '%s %s' "$prefix" "$line"
    prefix=','
done <Test2.txt
printf ' ]\n'

不过,如果您的任务是生成有效的 JSON,我将支持使用 JSON 特定工具的建议。这很烦人,而且有点脆弱。

【讨论】:

    【解决方案2】:

    您想要的输出看起来像 JSON,如果是这样,您可以为此使用 。例如:

    jq -Rn '[inputs]' Test2.txt
    

    【讨论】:

      【解决方案3】:

      使用printf

      data="
          2020-01-01-00-00
          2020-01-01-06-00
          2020-01-01-12-00
          2020-01-01-18-00
      "
      
      printf -v data %s,\  $data
      printf "[ ${data%, } ]"
      

      【讨论】:

        【解决方案4】:

        一个 perl 的小技巧:

        perl -00 -pe 'chomp; s/\n/, /g; BEGIN {print "[ "} END {print " ]\n"}' Test2.txt
        

        【讨论】:

          【解决方案5】:

          sed

          $: sed -n '$!H; ${H; x; s/\n/, /g; s/$/ ]\n/; s/^,/[/; p;}' infile
          

          bash

          $: dat="$(printf "%s, " $(<infile))";  printf "[ ${dat%, } ]\n";
          

          'awk'

          $: awk 'BEGIN{ printf "[ "; sep=""; } { printf "%s%s", sep, $0; sep=", "; } END{ print " ]"; }' infile
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-07-26
            • 1970-01-01
            • 2015-09-30
            • 2019-02-17
            • 1970-01-01
            • 1970-01-01
            • 2016-07-26
            • 2019-02-21
            相关资源
            最近更新 更多