开发者社区> 问答> 正文

shell脚本如何减少中间文件的使用

刚刚开始接触shell,用以处理工作中一些小问题
今天写了一个脚本,代码如下:

#!/bin/bash
zcat $1 | awk -F\" '{print $8}'|sort|uniq -c|sort -r|awk '{print $2,$1}' >ips.txt

cat ips.txt | while read line
do
A=(`echo $line`)
B=`nslookup ${A[0]}`
if [[ "$B" =~ "baidu" ]]
then
    echo ${A[@]} "真"
else
    echo ${A[@]} "假"
fi
done >iprst.log
rm ips.txt

脚本运行过程需要生成一个ips.txt文件,最后又删除。这种只在运行过程中需要用到的文件,我称之为中间文件。
在使用shell解决其他问题时也经常遇到这种情况,有时候甚至需要用到2~3个这种中间文件。
请问,有什么方法可以减少这类文件的使用,让代码更简洁呢?
嵌入式文档如何应用到以上脚本中?

展开
收起
a123456678 2016-06-28 11:25:43 2113 0
2 条回答
写回答
取消 提交回答
  • zcat $1 | awk -F\" '{print $8}'|sort|uniq -c|sort -r|awk '{print $2,$1}' >ips.txt
    改成
    ips = $(zcat $1 | awk -F" '{print $8}'|sort|uniq -c|sort -r|awk '{print $2,$1}' )
    用$ips 替换ips.txt

    2019-07-17 19:48:06
    赞同 展开评论 打赏
  • 管道本身就可以解决这种问题,以上面的代码为例,完全可以这样写:

    zcat $1 | awk -F\" '{print $8}'|sort|uniq -c|sort -r|awk '{print $2,$1}' | 
    while read line
    do
    A=(`echo $line`)
    B=`nslookup ${A[0]}`
    if [[ "$B" =~ "baidu" ]]
    then
        echo ${A[@]} "真"
    else
        echo ${A[@]} "假"
    fi
    done >iprst.log
    2019-07-17 19:48:06
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Shell 脚本速查手册 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载