Bash 带条件的打印字段
我有一个CSV文件,其中包含以下内容: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"
"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