如何在shell脚本中处理CSV文件中的一列(其中可以包含多行)?
基本上,我正在尝试处理以下格式的CSV文件:
a,b,"Some description"
a,b,"Some other description"
a,b,"Some description on line 1
some description on line 2"
a,b,"some descrption on line 3"
我通过将a和b作为变量传递来在文件上运行awk命令。因此,如果它们匹配第一列和第二列中的值,那么我需要在一个文件中包含第三列的值
案例1的预期输出"some description"
"some other description"
案例2的预期输出
"some description on line 1
some description on line 2"
"some description on line 3"
目前,我的代码适用于第一种情况。如何修改它以同时处理第二种情况
awk -v a=${val1} -v b=${vale2} -F "," '{
if(($1 == a) && ($2 == b)) { print }
}' input.csv | \
awk -F "," '{
line="";
for(i=3;i<=NF;i++)
if(i==3)
line=$i;
else
line=line FS $i;
print line
}'
使用循环作为我的描述,可以在其中使用逗号)字段分隔符