2014-12-03 113 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