如果没有tmp1和tmp2,我怎么能这样做? (信息文件很好)
cat information_file1 | sed -e 's/\,/\ /g' >> tmp1
echo Messi >> tmp2
cat tmp1 | grep Ronaldo | cut -d"=" -f2- >> tmp2
rm tmp1
cat information_file2 | fin_func tmp2
rm tmp2
fin_func为你的见解。(它不是真正的功能,我不想改变它只是你会看到我如何使用tmp2和info_file2)
while read -a line; do
if [[ "`grep $line $1`" != "" ]]; then
echo 1
fi
done
答案 0 :(得分:1)
这应该有用,虽然它非常不全面:
cat information_file2 | fin_func <(cat <(echo Messi) <(cat information_file1 | \
sed -e 's/\,/\ /g' | grep Ronaldo | cut -d"=" -f2-))
<( … )
语法为Bash’s process substitution,它返回文件/dev/fd
文件描述符的名称及其写入的输出。
答案 1 :(得分:0)
示例fin_func
多次读取作为命令参数给出的文件,因此除非允许我们修改该函数,否则至少需要一个临时文件。问题中给出的样本fin_func
可以很容易地修改,以便它不会多次读取文件,但由于您指出这不是真正的脚本,我将假设它不能被修改,并且必须将文件作为一个论点。那就是说,我会把你的剧本写成:
trap 'rm -f $TMPFILE' 0 # in bash, just trapping on 0 will work for SIGINT, etc
TMPFILE=$( mktemp )
{ echo Messi
tr , ' ' < information_file1 |
awk -F= '/Ronaldo/{print $2}' ; } > $TMPFILE
< information_file2 fin_func $TMPFILE
我强烈怀疑fin_func
可以被重写,因此它不需要常规文件作为输入。此外,不需要tr
,因为gsub
只能在awk
匹配行并保存一些处理,但这可能是一个微不足道的优化。但是,使用tr
代替sed
在美学上是必要的。