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 带条件的打印字段_Bash_Csv_Awk_Sed - Fatal编程技术网

Bash 带条件的打印字段

Bash 带条件的打印字段,bash,csv,awk,sed,Bash,Csv,Awk,Sed,我有一个CSV文件,其中包含以下内容: "1","32","1","2" "2","2","22","2" "3","72","5","2" "4","36","22","2"

我有一个CSV文件,其中包含以下内容:

"1","32","1","2"
"2","2","22","2"
"3","72","5","2"
"4","36","22","2"
awk -F , -v OFS=, '{if ($3=="22")} {print $1}' myfile.csv
如果第三个字段包含值22,我只想显示第一个字段。 在我的示例中,我希望:

2
4
我是这样想的:

"1","32","1","2"
"2","2","22","2"
"3","72","5","2"
"4","36","22","2"
awk -F , -v OFS=, '{if ($3=="22")} {print $1}' myfile.csv

我该怎么做呢?

如果可以,保留引号:

awk -F, '$3=="\"22\""{print $1}' test.csv
awk -F, '$3=="\"22\""{str=$1; gsub("\"","",str); print str}' test.csv
这种情况下的输出:

"2"
"4"
要去除引号,可以执行以下操作:

awk -F\" '$6==22{print $2}' test.csv
输出:

2
4
在这种情况下,引号被视为分隔符。因此,我们必须调整列的编号

当然,您也可以替换引号:

awk -F, '$3=="\"22\""{print $1}' test.csv
awk -F, '$3=="\"22\""{str=$1; gsub("\"","",str); print str}' test.csv

下面是一个更简单的awk命令,用于完成您的工作:

awk -F '","|"' '$4 == 22{print $2}' file

2
4

IMHO最简单的方法是去掉双引号,然后做任何你想做的事情:

$ awk -F, '{gsub(/"/,"")} $3==22{print $1}' file
2
4