在另一个文件中查找一个文件的内容
- 2024-10-30 08:35:00
- admin 原创
- 47
问题描述:
我正在使用以下 shell 脚本将一个文件的内容查找到另一个文件中:
#!/bin/ksh
file="/home/nimish/contents.txt"
while read -r line; do
grep $line /home/nimish/another_file.csv
done < "$file"
我正在执行脚本,但它没有显示 CSV 文件中的内容。我的 content.txt 文件包含数字,例如"08915673"
或 ,"123223"
这些数字也存在于 CSV 文件中。我的做法有什么问题吗?
解决方案 1:
grep
本身就可以做到这一点。只需使用标志-f
:
grep -f <patterns> <file>
<patterns>
是一个每行包含一个模式的文件;<file>
是您想要在其中搜索内容的文件。
请注意,为了强制grep
将每一行视为一个模式,即使每行的内容看起来像一个正则表达式,您也应该使用标志-F, --fixed-strings
。
grep -F -f <patterns> <file>
如果您的文件是 CSV,正如您所说的,您可以执行以下操作:
grep -f <(tr ',' '
' < data.csv) <file>
举例来说,考虑文件“a.txt”,其中包含以下行:
alpha
0891234
beta
现在,文件“b.txt”包含以下行:
Alpha
0808080
0891234
bEtA
以下命令的输出是:
grep -f "a.txt" "b.txt"
0891234
您根本不需要for
在这里进行 -loop;grep
它本身就提供了此功能。
现在使用您的文件名:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '
' < "${patterns}") "${search}"
您可以更改','
为文件中的分隔符。
解决方案 2:
另一个解决方案:
使用
awk
和创建您自己的hash
(例如 ahash),全部由您自己控制。替换
$0 to $i
后您就可以匹配任何您想要的字段。
awk -F"," '
{
if (nowfile==""){ nowfile = FILENAME; }
if(FILENAME == nowfile)
{
hash[$0]=$0;
}
else
{
if($0 ~ hash[$0])
{
print $0
}
}
} ' xx yy
解决方案 3:
我认为您并不真正需要脚本来完成您想要做的事情。
一个命令就足够了。在我的例子中,我需要在 CSV 文件的第 11 列中使用标识号(以“;”作为分隔符):
grep -f <(awk -F";" '{print $11}' FILE_TO_EXTRACT_PATTERNS_FROM.csv) TARGET_FILE.csv
运行代码片段Hide results展开片段
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD