[英]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.