首先,我为我糟糕的英语感到抱歉。我想读取一个包含多个电话号码(每行一个号码)的文件(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 < $filetel文件示例:
44001547
44001478
55421487但是那个代码什么也不返回!当我声明‘当前’变量与文字,它是正确的工作!发生了什么?!
发布于 2019-02-13 13:09:21
您的grep命令被重定向,以便将其输出写入文件,因此在终端上看不到它。
不管怎么说,你应该用更简单更快的
grep -Ff "$file" "$datafile"如果要将输出保存到文件中并同时查看它,请添加| tee -a output.txt。
echo `command`是一种编写command的错误和效率低下的方法。(echo "`command`"只是效率低下。)没有理由将标准输出捕获到字符串中,这样您就可以将该字符串echo为标准输出。
发布于 2019-02-13 13:10:24
为什么不直接搜索行变量呢?我做了一些测试,这个脚本使用bash在我的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,因此匹配的结果保存在那里。
发布于 2019-02-14 12:49:13
当使用while loop.instead use 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`
donehttps://stackoverflow.com/questions/54670816
复制相似问题