使用bash读取CSV文件中的特定列

时间:2014-12-03 16:33:22

标签: bash shell unix csv scp

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

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

#!/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。

谢谢!

2 个答案:

答案 0 :(得分:5)

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

while IFS=, read -r col1 file_name col3

答案 1 :(得分:2)

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

例如,如果我理解正确的话,下面的内容可能对您的问题有所帮助:

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

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

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

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