【发布时间】:2018-01-19 13:05:38
【问题描述】:
我得到一个输入文件 vendor.csv,其中有一列名为“retailer”。 我有一个预定义的有效零售商值列表,它们是 a、b、c。如果“d”出现在零售商列中,我将不得不采取一些措施,主要是将其回显到日志中并停止处理并通知用户。
到目前为止,我已经完成了以下操作
f1=/stage/Scripts/ecommerce/vendor/final*.csv
k=`cut -d, -f1 $f1 |sort -u`
echo $k
这给了我
a b c d
上面的o/p不是逗号分隔的
对于上述情况,我可以将有效值 a b c 存储在文件或字符串中
我现在如何进行检查?这是解决这个问题的最佳方法吗?
有效值为ALB/SFY Total Ecom TA Peapod Total Ecom TA Target Total Ecom TA
现有数据包含以下唯一数据点
ALB/SFY Total Ecom TA Hy-Vee Total Ecom TA Peapod Total Ecom TA Target Total Ecom TA
所以“Hy-Vee Total Ecom TA”是一个无效值。
这是我对 grep 的尝试
$ echo $s
ALB/SFY Total Ecom TA Peapod Total Ecom TA Target Total Ecom TA
echo $k
ALB/SFY Total Ecom TA Hy-Vee Total Ecom TA Peapod Total Ecom TA Target Total Ecom TA
grep -v "$s" "$k"
它给了我一个错误
grep: ALB/SFY Total Ecom TA
Hy-Vee Total Ecom TA
Peapod Total Ecom TA
Target Total Ecom TA: No such file or directory
一些解决方案为我指明了正确的方向,在 R 中,我将完成上述任务
valid_values = ['a','b','c']
invalid_retailer = unique(vendorfile$retailer) %not% in valid_values
我试图在 shell 中复制相同的过程,因此我使用了 cut 和 grep。
【问题讨论】:
-
您要求“采取一些行动,主要是回应并通知用户”。很不清楚。你能提供更多细节吗?另外,发布您的输入的小样本?
-
像in your previous question 一样,您不引用
echo的值会让自己感到困惑。你会发现输出实际上是换行符分隔的。 -
grep的第一个参数必须是正则表达式。如果值"$s"实际上包含换行符,你应该没问题。但第二个参数是文件名,不是字符串。要检查字符串,printf "%s\n" "$k" | grep -v "$s"或(如果您的 shell 是 Bash)grep -v "$s" <<<"$k" -
由于您收到的答案只有大约 33% 的接受率,因此不鼓励我花时间设计解决此问题的方法。你似乎也很难接受那些清楚知道自己在做什么的人的建议。
-
@shellter 感谢您的更新,很抱歉懒得自己检查。