【问题标题】:Reading a specific column in a CSV file with bash使用 bash 读取 CSV 文件中的特定列
【发布时间】:2015-02-01 07:41:05
【问题描述】:

我真的对 bash/shell 脚本缺乏经验。我有大量文件需要跨服务器进行 SCP。我有一个包含三列的 CSV 文件中需要移动的文件列表。第二列称为文件名,包含文件的路径。

我需要读取文件的每一行,但只处理第二列。我在网上找到了类似的东西:

#!/bin/bash

csv_file=$1

while IFS=',' read -r file_name; do
    echo -e "File Name\t: $file_name"
done < $csv_file
IFS=$' \t\n'

但它似乎只是输出文件的所有 3 列。任何指导将不胜感激,我真的不太了解 bash。

谢谢!

【问题讨论】:

标签: bash shell unix csv scp


【解决方案1】:

您需要为正在读取的文件的每一列使用一个变量。最后一个变量将获取所有剩余的列。所以应该是:

while IFS=, read -r col1 file_name col3

【讨论】:

    【解决方案2】:

    如果在另一个单一文件中的输出是可以接受的,他听起来很适合awk,这是一个为逐行处理分隔输入而构建的程序。

    例如,如果我理解正确,以下内容可能有助于解决您的问题:

    awk -F',' '{print "File Name:\t"$2}' inputfile > outputfile
    

    -F',' 告诉 awk 文件中的字段分隔符是逗号。

    print 是 awk 用于打印输出的命令,在这种情况下,字符串“文件名:\t”后跟文件中的第二个字段,在 awk 中用 $i 表示,其中 i 是字段编号 (不是索引,$0 for awk 是您感兴趣的整行)。

    awk 是一个非常强大的工具,这只是它可以执行的复杂处理的一个非常简单的示例 - 您可以在此处阅读有关它的特性和功能的更多信息:http://www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_toc.html

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 2013-05-06
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多