【问题标题】:using pipe to run a file and append result as a new col使用管道运行文件并将结果附加为新列
【发布时间】:2015-06-21 22:28:16
【问题描述】:

我有一个包含 A、B、C 列的 CSV 文件。我有一个脚本,可以读取 2 个句子并输出一个分数。具体来说,我需要脚本来读取 col B 和 col C 以输出分数。

例如:

A      B       C
id  string1 string2

我的脚本是这样工作的:myscript(string1, string2) = score

如何编写一行代码,只取 B 列和 C 列,然后将所有内容输出到一个新文件中?

我希望将输出保存到这样的新文件中:

A       B        C       D
id   string1   string2  score

我相信代码会变成这样,但不确定语法是否正确。

textfile.csv | perl myscript.pl > new_textfile.csv

请帮忙

【问题讨论】:

    标签: shell unix command-line pipe pipeline


    【解决方案1】:

    我相信这就是你所需要的

     $ awk -F "," '{print $2,",",$3;}' textfile.csv | perl myscript.pl > new_textfile.csv
    

    【讨论】:

      【解决方案2】:

      用于“添加列”的标准 Unix 工具是 paste

      如果您的脚本为 textfile.csv 中的每一行输入生成一行输出,您可以将文件并排粘贴在一起,如下所示:

      perl myscript.pl > tmpfile.csv
      paste -d , textfile.csv tmpfile.csv > new_textfile.csv
      

      或者您可以通过使用管道来一步完成(省略临时文件):

      perl myscript.pl | paste -d , textfile.csv - > new_textfile.csv
      

      如果您的脚本仅对输入的第 2 列和第 3 列进行操作,并且不知道如何忽略第 1 列,您可以提取第 2 列和第 3 列以输入到您的脚本中:

      awk -F, '{print $2, $3}' textfile.csv | perl myscript.pl | ...
      

      (但请注意,使用 -F, 调用的 awk 不是一个完全通用的 CSV 解析器,并且不会处理引用。)

      最后,如果您的脚本的每次调用只知道如何对一对数字进行操作(即,对来自textfile.csv 的一行输入),您可以使用循环,如下所示:

      cp /dev/null tmpfile.csv
      awk -F, '{print $2, $3}' textfile.csv | while read col2 col3
      do
          perl myscript.pl $col2 $col3 >> tmpfile.csv
      done
      paste -d , textfile.csv tmpfile.csv > new_textfile.csv
      

      或者你可以看中并重定向循环的输出:

      awk -F, '{print $2, $3}' textfile.csv | while read col2 col3
      do
          perl myscript.pl $col2 $col3
      done > tmpfile.csv
      paste -d , textfile.csv tmpfile.csv > new_textfile.csv
      

      或者如果你真的想成为一名牛仔:

      awk -F, '{print $2, $3}' textfile.csv | while read col2 col3
      do
          perl myscript.pl $col2 $col3
      done | paste -d , textfile.csv - > new_textfile.csv
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-11
        • 1970-01-01
        • 2021-05-07
        • 2011-11-13
        • 2019-07-02
        • 1970-01-01
        相关资源
        最近更新 更多