sh/bash/dash/ksh/zsh等Shell脚本
-
NewUserFF
- 帖子: 413
- 注册时间: 2010-11-19 22:55
#1
帖子
由 NewUserFF » 2011-03-02 19:55
我的目的是搜索~/music下面的所有mp3文件,并显示出第一个mp3文件,我想用awk实现,因此我这样做:
代码: 全选
file=$(find ~/music -name *.mp3)
field=$(awk -F '^M' '{print $1}' "${file}")
结果是显示出了所有的mp3文件,我把 -F '^M' 改成 -F ' ' ,结果依旧,非常纳闷,我的感觉是:file这个变量里面有无数个mp3文件路径,每个路径占一行,那么只要用回车(^M)分割,就可以得到第一行,但结果不是这样,我试了下
结果显示的是一片mp3路径
中间只有空格,而我设想的结果应该是这样的
我非常奇怪,find找到的东西不是一行一行的吗?怎么echo后居然变成以空格分割了?以空格分割也行,但是-F ' '不管用,为什么,我的代码错在哪里呢?
先谢谢大家啦!
-
astolia
- 论坛版主
- 帖子: 6703
- 注册时间: 2008-09-18 13:11
#2
帖子
由 astolia » 2011-03-02 21:12
NewUserFF 写了:我非常奇怪,find找到的东西不是一行一行的吗?怎么echo后居然变成以空格分割了?
你没加引号shell自然不会分行显示
实际上你的问题是在于没有弄清楚awk中Records和Fields的概念,所以你再怎么通过-F设置Fields,仍然是将换行符作为每个记录的分隔符
还有就是你该用 echo xxx| awk这种方式,awk xxx这种方式是处理xxx这个文件
代码: 全选
field=$(echo "${file}" | awk 'BEGIN{RS="";FS="\n"}{print $1}')
最后一点是,find ~/music -name *.mp3 | head -1 不就完事了吗
-
NewUserFF
- 帖子: 413
- 注册时间: 2010-11-19 22:55
#3
帖子
由 NewUserFF » 2011-03-03 12:13
楼上的大侠,虽然我还是怎么弄懂,不过十分感谢你的回答!我再琢磨一下
-
trigger
- 帖子: 1604
- 注册时间: 2006-10-25 18:08
#4
帖子
由 trigger » 2011-03-03 13:43
shell里面不要老想着用变量,用管道
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。
-
trigger
- 帖子: 1604
- 注册时间: 2006-10-25 18:08
#5
帖子
由 trigger » 2011-03-03 13:48
find的输出结果保存进了变量$file
$file展开是一个长字符串,你的写法awk会认为该字符串是当前目录下的一个文件名,显然找不到这个文件
楼主真是一派胡言,真可谓:“两个黄鹂鸣翠柳,不知所云;一行白鹭上青天,不知所止“。本来不想和你辩论,今天气愤不过,和你理论一番。我国宪法写得清清楚楚:“一夜夫妻百日恩,七楼以上才有电梯”。这个想必你知道,既然知道,你就不能断章取义,就算是天气预报,它还有不准的时候呢!!!再者说了,那中国银行也不是你一家开的。人家马拉多纳都结婚了,你还拿着粮票顶什么用呢。真是滑天下之大稽。前些日子,全国人大刚刚开过会,郑重声明:“中国不搞多party制,存栏母猪给补贴”。多好的事呢,楞让你这号人给搅混了。