【问题标题】:Edit .csv file via shell script output通过 shell 脚本输出编辑 .csv 文件
【发布时间】:2016-12-06 16:20:03
【问题描述】:

我有一个脚本,它将.csv 文件作为输入并逐行运行

kma210,projects.kma210
kma215,projects.kma215_2
KMA3xx,projects.kma3xx
KMI7,projects.kmi7

以上是.csv 文件的示例。我为每一行运行两种类型的进程(例如:abc_process 和 xyz_process)。

现在我的要求是一旦脚本运行一行,输出即成功/失败应该打印在第三列 (abc_process) 和第四列 (xyz_process) 的同一文件中。

示例请看这里:

kma210,projects.kma210,success,success
kma215,projects.kma215_2,fail,success
KMA3xx,projects.kma3xx,success,fail
KMI7,projects.kmi7,fail,fail

有人可以推荐吗?

【问题讨论】:

  • 您如何获得状态? success/fail?
  • 您必须检查同时访问的文件
  • @Inian 我为输出提供了 echo 以查看它是成功还是失败。 echo "abc_process success" echo "xyz_process success" 是否有可能解析 echo 输出并添加到第三、第四列?
  • @SubratSahoo:你说什么时候处理一行?你是怎么做到的,使用awk 并在其中运行任何系统命令或其他方式?
  • @Inian cat "$1" |而 IFS='' 读取 -r 行; do D="$(echo "$line" | cut -d ',' -f 1 | tr -d '"')" P="$(echo "$line" | cut -d '.' -f 2 )" echo 'D: '"$D" echo 'P: '"$P"

标签: linux bash shell csv


【解决方案1】:

我认为你想要达到的目标就是这样的。

从您的输入文件 (input.csv) 中,使用如下脚本:-

#!/bin/bash

while IFS=',' read -r col1 col2
do
    # The below two read commands are to process the success/fail status
    # string as you indicated. If you are receiving a string of the below 
    # form, from an external bash command; you need to use process-substitution 
    # as

    # IFS= read -r _ p1Status <<(p1Command)
    # IFS= read -r _ p1Status <<(p2Command)

    IFS= read -r _ p1Status <<<"abc success"
    IFS= read -r _ p2Status <<<"xyz fail"

    # The below printf just prints the output as you need to stdout
    # to create a .csv out of it, append it to a new file as

    # printf "%s,%s,%s,%s\n" "$col1" "$col2" "$p1Status" "$p2Status" >> output.csv

    printf "%s,%s,%s,%s\n" "$col1" "$col2" "$p1Status" "$p2Status"
done<input.csv

上述命令写入stdout,产生的输出为

kma210,projects.kma210,success,fail
kma215,projects.kma215_2,success,fail
KMA3xx,projects.kma3xx,success,fail
KMI7,projects.kmi7,success,fail

您可以使用&gt;&gt; 运算符将其附加到文件中,并带有我注释掉的行。或者,如果您想要一个文件并替换原始文件。添加一行

mv -v output.csv input.csv 

作为脚本的最后一行。

【讨论】:

  • 我是脚本新手,我会在这里给出我的脚本。你能把它合并进去吗?
  • SO 不是免费的编码服务,您必须尝试从我已经提供的解决方案中即兴发挥。您可以发布您的要求,让我看看有什么可以帮助您的。
猜你喜欢
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2022-12-15
相关资源
最近更新 更多