我有:
file.csv
其中包含
2,1,"string with spaces",3,4,5
2,1,"some other string",3,4,5
2,1,"string with spaces more than this",3,4,5
2,1,"yet another",3,4,5
2,1,"string with spaces too",3,4,5
当我这样做时:
grep '"string with spaces",' file.csv
它产生所需的结果:
2,1,"string with spaces",3,4,5
现在我需要在while循环中这样做:
while read p; do
grep '"$p",' file.csv
done < list.txt
位置:
list.txt
包含:
string with spaces
yet another
我想要的输出是:
2,1,"string with spaces",3,4,5
2,1,"yet another",3,4,5
问题是我的while循环返回为空或部分匹配。如何遍历list.txt
并获得所需的输出?
答案 0 :(得分:4)
如果您对notebook 5.7.6
感到满意,那么这应该很容易。
awk
OR(根据Ed ir先生的评论,将字段分隔符设置为逗号并保持更清晰,可以尝试跟随)
awk 'FNR==NR{a[$0];next} ($4 in a)' list.txt FS="[,\"]" file.csv
输出如下。
awk -F, 'FNR==NR{a["\""$0"\""];next} $3 in a' list.txt file.csv
答案 1 :(得分:2)
您所有的字符串引用都使用单引号app/Kernel.php
,它不会对'
变量进行任何插值。将其更改为$p
将解决此问题。关键在于这里的变量插值是在双引号grep '"'"$p"'",' file.csv
内完成的,然后与包含实际双引号"
的字符串连接起来。
更多(或更少,取决于您的观点)的可读版本可能如下所示:"
答案 2 :(得分:0)
grep -Ff strings.txt file.csv
这应该使您足够远。