免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2967 | 回复: 10
打印 上一主题 下一主题

请教,怎样将shell中的路径传到awk中去。 非常谢谢!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-04 08:41 |只看该作者 |倒序浏览
假设我有如下的目录和文件。
A
├─B1
│  └─a.txt
├─B2
│  └─a.txt
├─B3
     └─a.txt

现在我要根据每个a.txt用awk生成r1.txt和r2.txt文件。结果大致如下。
A
├─B1
│  ├─r1.txt
│  ├─r2.txt
│  └─a.txt
├─B2
│  ├─r1.txt
│  ├─r2.txt
│  └─a.txt
├─B3
    ├─r1.txt
    ├─r2.txt
    └─a.txt

我想出的shell脚本和awk如下,都存在A的目录下。
cat test.sh
find `pwd` -name "a.txt" | while read LINE;
do
        awk -f "test.awk" $LINE;
done

cat test.awk
{
        if (NR > 1) {
                print RS$0 > "r1.txt"     <-------------路径问题
        }
        else if (NR > 2) {
                print RS$0 > "r2.txt"     <-------------路径问题
        }
}

结果,运行上面的shell和awk,生成的文件却保存在A目录下。
A
├─B1
│  └─a.txt
├─B2
│  └─a.txt
├─B3
│  └─a.txt
├─r1.txt
├─r2.txt

请问,我该怎么办呢? 谢谢!!!

论坛徽章:
0
2 [报告]
发表于 2009-09-04 09:39 |只看该作者
a.txt里面啥内容???

[ 本帖最后由 恋家的老鼠 于 2009-9-4 09:55 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-09-04 09:58 |只看该作者

回复 #2 恋家的老鼠 的帖子

非常感谢,

我用的是环境变量的方法.
在shell中设置AWKTMPPATH
在awk中调用ENVIRON["AWKTMPPATH"]。

其他人也问过啊,
看来我有时间要经常来看看,学学。

论坛徽章:
0
4 [报告]
发表于 2009-09-04 10:01 |只看该作者

回复 #2 恋家的老鼠 的帖子

a.txt的内容就是一般的需要用RS分割的东西。

论坛徽章:
0
5 [报告]
发表于 2009-09-04 10:19 |只看该作者
还是不晓得你文件里面放的东西和脚本有什么关系。

按照你的意思,a.txt只是确定要生成的r1.txt和r2.txt的目录。如果这样,你的变量传递就是有问题的。

这样我把我做的脚本贴出来,你看看有什么问题再联系我。

# cat test.sh
find `pwd` -name "a.txt" | while read LINE;
do
        awk -v line=$LINE -f test.awk
done

# cat test.awk
BEGIN {
        sub(/a\.txt/,"",line)
        print line > line"/r1.txt"
        print line > line"/r2.txt"
}

论坛徽章:
0
6 [报告]
发表于 2009-09-04 10:49 |只看该作者

回复 #5 恋家的老鼠 的帖子

非常感谢,
你这个方法应该也行,请让我有时间的话再试试,
现在比较忙,只要找个能跑得就行了。

我用的是下面这个方法,看上去不是很好,但是结果出来了。
cat test.sh
find `pwd` -name "a.txt" | while read LINE;
do
        AWKTMPPATH="`dirname $LINE`";
        export AWKTMPPATH;
        awk -f "test.awk" $LINE;
done

cat test.awk
{
    if (NR > 1) {
            print RS$0 > ENVIRON["AWKTMPPATH"]"/r1.txt"
    }
    else if (NR > 2) {
            print RS$0 > ENVIRON["AWKTMPPATH"]"/r2.txt"
    }
}

论坛徽章:
0
7 [报告]
发表于 2009-09-04 11:38 |只看该作者
你狠,传递变量都要给环境变量来传递。

你把我的脚本改改就能用的,我只是没有分析你a.txt文件。

论坛徽章:
0
8 [报告]
发表于 2009-09-04 11:45 |只看该作者
重定向的位置换成gensub("/[^/]*$","","1",FILENAME)"/r1.txt"。

论坛徽章:
0
9 [报告]
发表于 2009-09-04 12:03 |只看该作者

回复 #7 恋家的老鼠 的帖子

呵呵,
我是shell,awk的菜鸟。 只看了几天,不好意思了。

我现在主要的任务是整理测试结果,不是写shell.
等空下来,好好研究研究这东西。

论坛徽章:
0
10 [报告]
发表于 2009-09-04 12:10 |只看该作者

回复 #8 kwokcn 的帖子

非常感谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP