我必须提交suppost 1.txt和2.txt 1.txt在每行中都有一个数字表示itemID。例如
43
345
65
第二个文件是csv并具有以下模式 用户ID,项ID,时间
我想从第二个文件中删除其itemID在第一个文件中的所有行 为此我做了以下
#!/bin/bash
while IFS= read -r var
do
paste -sd '|' | xargs -I{} grep -v -E {} 2.txt
done < "1.txt"
我读了第一个文件并创建了一个正则表达式,但是不知道egrep的参数来获取第二个文件(itemID)
答案 0 :(得分:0)
您可以使用sed
在1.txt中的每个ID的开头和结尾添加逗号,然后使用grep
过滤掉生成的字符串:
sed 's/^\|$/,/g' 1.txt | grep -vFf- 2.txt
-F
将模式解释为固定字符串,即不是正则表达式-f
告诉grep从给定文件中读取模式,在本例中为-
,即标准输入答案 1 :(得分:0)
使用awk
awk -F "," 'FNR==NR{a[$0]=1;next} a[$2]!=1{print}' 1.txt 2.txt
a[$0] = 1
将1.txt中存在的项目ID记录到数组a
a[$2] != 1
打印出2.txt中没有数组a