首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用grep命令中从文件中读取的行

如何使用grep命令中从文件中读取的行
EN

Stack Overflow用户
提问于 2019-02-13 12:59:14
回答 3查看 1.4K关注 0票数 0

首先,我为我糟糕的英语感到抱歉。我想读取一个包含多个电话号码(每行一个号码)的文件(tel.txt),并使用该行到grep命令搜索源文件(另一个文件)中的特定号码!

我写了这段代码:

代码语言:javascript
复制
dir="/home/mujan/Desktop/data/ADSL_CDR_Text_Parts_A"
file="$dir/tel.txt"
datafile="$dir/ADSL_CDR_Like_Tct4_From_960501_to_97501_Part0.txt"

while IFS= read -r line
do
    current="$line"
    echo `grep -F $current "$datafile" >> output.txt`
done < $file

tel文件示例:

代码语言:javascript
复制
44001547
44001478
55421487

但是那个代码什么也不返回!当我声明‘当前’变量与文字,它是正确的工作!发生了什么?!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-13 13:09:21

您的grep命令被重定向,以便将其输出写入文件,因此在终端上看不到它。

不管怎么说,你应该用更简单更快的

代码语言:javascript
复制
grep -Ff "$file" "$datafile"

如果要将输出保存到文件中并同时查看它,请添加| tee -a output.txt

echo `command`是一种编写command的错误和效率低下的方法。(echo "`command`"只是效率低下。)没有理由将标准输出捕获到字符串中,这样您就可以将该字符串echo为标准输出。

票数 6
EN

Stack Overflow用户

发布于 2019-02-13 13:10:24

为什么不直接搜索变量呢?我做了一些测试,这个脚本使用bash在我的linux (CentOS 7.x)上工作:

代码语言:javascript
复制
#!/bin/bash
file="/home/mujan/Desktop/data/ADSL_CDR_Text_Parts_A/tel.txt"

while IFS= read -r line
do
    echo `grep "$line" /home/mujan/Desktop/data/ADSL_CDR_Text_Parts_A/ADSL_CDR_Like_Tct4_From_960501_to_97501_Part0.tx >> output.txt`
done < $file

试试看。它没有显示屏幕上的任何内容,因为您要将输出重定向到文件output.txt,因此匹配的结果保存在那里。

票数 0
EN

Stack Overflow用户

发布于 2019-02-14 12:49:13

当使用while loop.instead use for循环读取时应使用文件描述符,以避免错误的重定向。

代码语言:javascript
复制
dir="/home/mujan/Desktop/data/ADSL_CDR_Text_Parts_A"
file="$dir/tel.txt"
datafile="$dir/ADSL_CDR_Like_Tct4_From_960501_to_97501_Part0.txt"

for line in `cat $file`
do
    current="$line"
    echo `grep -F $current "$datafile" >> output.txt`
done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54670816

复制
相关文章

相似问题

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