+ -
当前位置:首页 → 问答吧 → 保留两个文件相同的行

保留两个文件相同的行

时间:2011-03-02

来源:互联网

我的目的是搜索~/music下面的所有mp3文件,并显示出第一个mp3文件,我想用awk实现,因此我这样做:
代码:
file=$(find ~/music -name *.mp3)
field=$(awk -F '^M' '{print $1}' "${file}")

结果是显示出了所有的mp3文件,我把 -F '^M' 改成 -F ' ' ,结果依旧,非常纳闷,我的感觉是:file这个变量里面有无数个mp3文件路径,每个路径占一行,那么只要用回车(^M)分割,就可以得到第一行,但结果不是这样,我试了下
代码:
echo ${file}

结果显示的是一片mp3路径
代码:
1.mp3 2.mp3 3.mp3
中间只有空格,而我设想的结果应该是这样的
代码:
1.mp3
2.mp3
3.mp3
我非常奇怪,find找到的东西不是一行一行的吗?怎么echo后居然变成以空格分割了?以空格分割也行,但是-F ' '不管用,为什么,我的代码错在哪里呢?
先谢谢大家啦!

作者: NewUserFF   发布时间: 2011-03-02

NewUserFF 写道:
我非常奇怪,find找到的东西不是一行一行的吗?怎么echo后居然变成以空格分割了?

你没加引号shell自然不会分行显示
代码:
echo "${file}"


实际上你的问题是在于没有弄清楚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 不就完事了吗

作者: astolia   发布时间: 2011-03-02

热门下载

更多