首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用bash删除特定的文件行

使用bash删除特定的文件行
EN

Stack Overflow用户
提问于 2017-11-15 08:13:58
回答 2查看 55关注 0票数 0

我必须将1.txt文件归档,而2.txt 1.txt在每一行中都有一个数字,表示itemID。例如

代码语言:javascript
运行
复制
43
345
65

第二个文件是csv,具有以下模式: userID、itemID、time

为此,我想从第二个文件中删除它们的itemID在第一个文件中的所有行,为此,我执行以下操作

代码语言:javascript
运行
复制
#!/bin/bash

while IFS= read -r var 
do
 paste -sd '|' | xargs -I{} grep -v -E {} 2.txt
done < "1.txt"

我读取第一个文件并创建一个正则表达式,但不知道egrep的参数以获得第二个字段(ItemID)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-15 08:56:55

带锥

代码语言:javascript
运行
复制
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的行
票数 0
EN

Stack Overflow用户

发布于 2017-11-15 08:36:39

您可以使用sed将逗号添加到1.txt中每个id的开头和结尾,然后只需使用grep筛选出产生的字符串:

代码语言:javascript
运行
复制
sed 's/^\|$/,/g' 1.txt | grep -vFf- 2.txt
  • -F将模式解释为固定的字符串,即不是正则表达式。
  • -f告诉grep从给定文件中读取模式,在本例中是-,即标准输入。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47302361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档