Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用shell命令读取.csv文件?_Linux_Shell_Csv - Fatal编程技术网

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

Linux 如何使用shell命令读取.csv文件?,linux,shell,csv,Linux,Shell,Csv,我有一个.csv文件,需要从中提取值。它的格式如下: 文件的第一行(无数据) 一,;杰克;丹尼尔斯;马德里484016; 二,;爱丽丝;摩根;伦敦;564127; 等等 我需要一个shell命令来读取.csv中特定列的所有行,将每一行与字符串进行比较,并在找到匹配行时返回一个值。在Java中,我将其定义为: > boolean findMatchInCSV(String valueToFind, int colNumber, String > colSeparator) 列之间的分

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

文件的第一行(无数据)

一,;杰克;丹尼尔斯;马德里484016;

二,;爱丽丝;摩根;伦敦;564127;

等等

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

> boolean findMatchInCSV(String valueToFind, int colNumber, String
> colSeparator)
列之间的分隔符可能确实会发生变化,这就是为什么我想要一个非常通用的名称(如果可能的话):)

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

谢谢

对于第二列:

awk -F ";" '$2 ~ /my_string/ {print $5}' file
要精确匹配:

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

我猜你在找类似的东西

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
FILE=data.csv
VALUE=“$1”
COLNUM=2美元
IFS=“$3”
而read-r-a myArray
做
如果“$myArray[$COLNUM]”==“$VALUE”;然后
出口0
fi
完成
我需要一个读取所有行的shell命令

.csv中特定列的

用一个字符串比较每个字符串

只要找到匹配行,就返回一个值

最后一个请求不清楚

上面的代码为列#5的值(从1开始计数)的每行显示一次搜索字符串(
foo
)。列之间用
分隔


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

非常感谢这些解决方案:)谢谢,有了您的解释,我现在理解了所有步骤,命令比我想象的要简单得多:)谢谢
awk -F ";" '$2 == "my_string" {print $5}' file
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
cat 1.csv                         # read the file
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$'