繁体   English   中英

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

[英]How to use line that read from file in grep command

首先,对不起我的英语不好。 我想读取一个包含许多电话号码(每行一个号码)的文件(tel.txt),并使用该行执行grep命令以搜索源文件(另一个文件)中的特定号码!

我写了这段代码:

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文件示例:

44001547
44001478
55421487

但是该代码什么也没有返回! 当我用文字声明“当前”变量时,它可以正常工作! 发生了什么?!

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

无论如何,您可能应该使用更简单,更快捷的方法

grep -Ff "$file" "$datafile"

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

echo `command`是编写command的错误且效率低下的方式。 echo "`command`"只是效率低下。)没有理由将标准输出捕获到字符串中,以便您可以将该字符串echo到标准输出。

为什么不直接搜索var 我已经进行了一些测试,此脚本可在具有bash shell的Linux(CentOS 7.x)上运行:

#!/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,因此匹配的结果保存在此处,因此在屏幕上没有任何显示。

使用while循环读取时应使用文件描述符,而应使用for循环以避免错误的重定向

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM