2014-12-03 125 views
1

我真的对bash/shell脚本没有经验。我有大量的文件需要通过服务器到SCP。我有一个需要移动到三列CSV文件中的文件列表。第二列称为file_name,并包含文件的路径。用bash读取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。

谢谢!

+1

为什么downvote和近距离投票“提供的信息不足”?对我来说似乎很简单。 – 2014-12-03 16:36:44

+0

可能重复的[bash,提取一列csv文件](http://stackoverflow.com/questions/19602181/bash-extract-one-column-of-a-csv-file) – tripleee 2014-12-03 17:02:08

回答

4

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

while IFS=, read -r col1 file_name col3 
+0

这工作!你是一个拯救生命的人! – Gus 2014-12-03 17:53:49

2

如果输出在另一烧毛文件是是可以接受的,他听起来象是非常适合awk,这是由符合分隔输入线处理生成的程序。

例如,以下可能您的问题有所帮助,如果我理解正确的:

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

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

print是AWK的命令打印输出,在这种情况下,字符串“文件名:\ t”的后面的文件中的第二字段,它在AWK由$i其中i是场号(NOT指数来表示, awk是整个系列)

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