Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
如何在bash上解析csv文件中具有特定列的内容_Bash_Csv_Multiple Columns - Fatal编程技术网

如何在bash上解析csv文件中具有特定列的内容

如何在bash上解析csv文件中具有特定列的内容,bash,csv,multiple-columns,Bash,Csv,Multiple Columns,我试图逐行解析csv文件,其格式如下: "name","content1,with commas as you see", "content2, also may contain commas", "..." ... ... 我想获取特定列的内容,不带引号。第一列和第三列。因此,预期的内容应该是: name (if get column 1) content2, also may contain commas (if get column 3) 我试着用awk,但没用。我也试过: wh

我试图逐行解析csv文件,其格式如下:

"name","content1,with commas as you see", "content2, also may contain commas", "..."
...
...
我想获取特定列的内容,不带引号。第一列和第三列。因此,预期的内容应该是:

name  (if get column 1)
content2, also may contain commas   (if get column 3)
我试着用awk,但没用。我也试过:

while IFS=, read col1 col2 col3 col4; 
do 
echo "got ${col1}|${col3}"; 
done < file
当IFS=时,读取col1 col2 col3 col4;
做
echo“got${col1}|${col3}”;
完成<文件

但它包含引号“”,col3的内容是错误的,它在每列中混合了逗号。那么,我应该如何拆分这些在每列中都包含逗号的格式呢?

如果您有
GNU awk
,那么
FPAT
将帮助您

gawk '{print $1,$3}' FPAT="([^,]+)|(\"[^\"]+\")" my.csv

awk
中,我们通常使用
FS
来定义字段不是什么,而不是字段是什么。在这种特殊情况下,我们确实希望通过字段的名称来定义字段,
FPAT
允许我们准确地定义字段

由于这些复杂性,如果您使用实际的CSV解析器,可能会容易得多,如下所示:

$ csvtool col 3 - <<< '"name","content1,with commas as you see", "content2, also may contain commas", "..."'
"content2, also may contain commas"

$csvtool col 3-hmm,似乎也不起作用,该列仍然与内容中的逗号混淆。我可能需要逐行处理它们。您需要
gnuawk
version4或更高版本。