如何使用shell命令读取.csv文件?

时间:2017-06-23 12:31:41

标签: linux shell csv

我有一个.csv文件,我需要从中提取值。它的格式如下:

  

文件的第一行(无数据)

     

1;杰克;丹尼尔斯;马德里; 484016;

     

2;翘;摩根;伦敦; 564127;

     

等...

我需要一个shell命令来读取.csv中特定列的所有行,将每个行与一个字符串进行比较,并在找到匹配的行时返回一个值。在Java中,我将它定义为:

> boolean findMatchInCSV(String valueToFind, int colNumber, String
> colSeparator)

列之间的分隔符可能确实会改变,这就是为什么我想要一个非常通用的东西,如果可能的话:):

我需要它作为shell命令,这可能吗?

由于

3 个答案:

答案 0 :(得分:1)

grep "my_string" file |awk -F ";" '{print $5}'

awk -F ";" '/my_string/ {print $5}' file

第二栏:

awk -F ";" '$2 ~ /my_string/ {print $5}' file

完全匹配:

awk -F ";" '$2 == "my_string" {print $5}' file

答案 1 :(得分:1)

我假设您正在寻找类似

的内容
FILE=data.csv
VALUE="$1"
COLNUM=$2
IFS="$3"

while read -r -a myArray
do
    if "$myArray[$COLNUM]"=="$VALUE"; then
        exit 0
    fi
done < tail -n +2 $FILE

exit 1

答案 2 :(得分:1)

  

我需要一个读取所有行的shell命令

cat 1.csv                         # read the file
  <。> .csv

中的特定列
cat 1.csv | cut -f5 -d';'         # keep only the field #5 (use ';' as separator)
  

将每个字符串与字符串进行比较

# keep only the row where the value of the field is exactly 'foo'
cat 1.csv | cut -f5 -d';' | grep '^foo$'
  只要找到匹配的行,

就会返回一个值。

最后一个请求不清楚。

上面的代码为每一行显示搜索到的字符串(foo)一次,它是第5列的值(从1开始计数)。列由;分隔。

很遗憾,它不会处理带引号的字符串。如果任何字段中的值包含分隔符(;),则CSV格式允许将字段值括在双引号中(")以防止分隔符被解释为分隔符(强制其文字值)。