我希望你们都度过了愉快的一天。我有一个问题,我可以提供一些帮助。我有两个CSV
个文件,两个文件都包含250k
个记录。一个看起来像这样:
ProductCode,StockLevel,Active
4101385360060,0,1
6019002320030,0,0
3328200078030,0,0
2411000347030,93,1
另一个是这样的:
ProductURL,Product Code,Product Name,More Fields
"http://www.domain.com",4101385360060,Timberland 6 In Buck Boot WHEAT NUBUCK
我想要对第一个文件做的是删除所有不需要这些条件的记录:
<All ok>,<!=0>,<=1>
然后使用第二个文件删除第一个文件中NOT
的所有行。
任何帮助 - 非常感谢。我怀疑awk
是我的朋友。
干杯,
太
答案 0 :(得分:2)
您可以使用此awk命令:
awk -F, 'FNR==NR && $2!=0 && $3==1{a[$1]; next} $1 in a' file1.csv file2.csv
但是我建议您在问题中提供更多具有预期输出的样本数据。
答案 1 :(得分:2)
听起来这就是你想要的:
$ cat tst.awk
BEGIN { FS="," }
FNR==1 { out=FILENAME"_out"; valid[$1] }
NR==FNR && ($2!=0) && ($3==1) { valid[$1] }
$1 in valid { print > out }
$ awk -f tst.awk file1 file2
$ cat file1_out
ProductCode,StockLevel,Active
2411000347030,93,1
$ cat file2_out
Product Code,Product Name
如果没有,请编辑您的问题以澄清您的要求,并提供更具真实代表性的样本输入和相关的预期输出。
答案 2 :(得分:1)
OP评论说id不是第二个文件的第一部分,所以一种方式可能是:
awk -F\, 'NR>1&&$2&&$3==1' file1 |tee -a file1_filtered |while IFS=, read -r id dummy; do
echo ",$id,"
done > pattern_file
grep -f pattern_file file2 >file2_filtered