使用bash删除特定的文件行

时间:2017-11-15 08:13:58

标签: bash shell grep

我必须提交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)

2 个答案:

答案 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
  • 项目ID的行