awk根据列上的条件筛选出CSV文件内容
我试图根据第二列的条件过滤掉CSV文件中的内容 例如: myfile.csv:awk根据列上的条件筛选出CSV文件内容,awk,Awk,我试图根据第二列的条件过滤掉CSV文件中的内容 例如: myfile.csv: A,2,Z C,1,B D,9,X BB,3,NN DD,8,PP WA,10,QR 排除。列表 2 9 8 所需的输出文件 C,1,B BB,3,NN WA,10,QR 如果我想排除2,我可以使用:awk-F',''$2=“2”{print}“myfile.csv。我试图找出如何迭代exclude.list文件以排除文件中的所有值 第一种解决方案(首选):以下awk可能会对您有所帮助 awk 'FNR==NR
A,2,Z
C,1,B
D,9,X
BB,3,NN
DD,8,PP
WA,10,QR
排除。列表
2
9
8
所需的输出文件
C,1,B
BB,3,NN
WA,10,QR
如果我想排除2
,我可以使用:awk-F',''$2=“2”{print}“myfile.csv
。我试图找出如何迭代exclude.list文件以排除文件中的所有值 第一种解决方案(首选):以下awk
可能会对您有所帮助
awk 'FNR==NR{a[$1];next} !($2 in a)' exclude.list FS="," myfile.csv
第二个解决方案(综合):通过更改输入文件的读取顺序,再添加一个awk
,尽管第一个解决方案更可取,但我添加此解决方案是为了涵盖所有可能的解决方案:)
awk'
FNR==NR{
a[$2]=$0;
如果(!b[$2]++){c[++i]=$2};
下一个}
(a中的$1){删除a[$1]}
结束{
对于(j=1;j@JamesBrown,谢谢,先生,您的赞赏,让我开心。向您学习所有专家先生:)干杯
awk '
FNR==NR{
a[$2]=$0;
if(!b[$2]++){ c[++i]=$2 };
next}
($1 in a) { delete a[$1]}
END{
for(j=1;j<=i;j++){
if(a[c[j]]){print a[c[j]]}
}}
' FS="," myfile.csv FS=" " exclude.list