当前位置:  技术问答>linux和unix

[求助]列表中某一列的值获取

    来源: 互联网  发布时间:2017-03-28

    本文导语:  这个是我的LINUX作业,嗯,第一题就卡住了 要求是做一个脚本文件,比如:$scirpt1.sh [-o] a.jpg b.jpg c.jpg ... 结果是要显示一个列表,格式是“文件名 创建时间”,其中创建时间如上图是通过exif2软件包截取TAG获得...

这个是我的LINUX作业,嗯,第一题就卡住了
[求助]列表中某一列的值获取[图片]
要求是做一个脚本文件,比如:$scirpt1.sh [-o] a.jpg b.jpg c.jpg ...
结果是要显示一个列表,格式是“文件名 创建时间”,其中创建时间如上图是通过exif2软件包截取TAG获得的
参数-o加上的话,就是将列表按时间顺序排序。

问题比较多
1.就是参数-o的写法,是不是检测$1然后shift?因为就这一个参数设置所以可以的话不用getopt

2.关于上图的那个列表,很不幸的是,没法用cut简单分类,因为分隔符并不是TAB,而是空格,更糟的是,文件名中有空格的话,根本就起不到作用。有人说可以用awk但是那个不会用。还有一点,第二题是跟第一题有关的,要求是把文件名给改成文件.时间.后缀这么一个格式,即例如:a.jpg就改成a.yyyy-mm-jj_hh.mm.ss.jpg这么一个样式,所以尽可能的话,果然还是希望把文件名和创建时间作为数值取出来。但是方法一时想不到。

3.最后就是脚本写出来后是$2$3$4这样一个一个轮流处理还是有一次性解决的方法?目前我构思的框架就是只能一个一个处理,但是这样要排序的话是不是只能先生成一个临时文本,再对文本内容进行排序?有没有其他思路?

请高手指点,谢谢。

|
如果输出的文件名固定为“JPG”作为后缀的话 文件名 的获取可以考虑用“JPG”作为分隔符;
时间的获取 考虑用空格分隔,取最后2个字段;
至于“-o”自己在脚本前面加判断然后配合排序就行了。

awk命令如下:
awk -F ".JPG" '{num=split($0,A," "); gsub(":",".",A[num-1]);gsub(":",".",A[num]);print $1"."A[num-1]"_"A[num]".jpg"}'   

#由于没有lz的环境,自己造了一个测试文件,里面的内容跟lz的输出类似
cat test.txt  
a1.JPG exif  Ascii 20 2012:10:28 09:26:32
a2.JPG exif Ascii 20 2012:11:20 03:26:32
a3 xy.JPG  exif Ascii 20 2012:10:28 10:26:32
a4.JPG exif Ascii 20 2012:10:23 09:26:32
a5 aa.JPG exif Ascii 20 2012:10:28 09:26:35

#替换后的文件名
awk -F ".JPG" '{num=split($0,A," "); gsub(":",".",A[num-1]);gsub(":",".",A[num]); print $1"."A[num-1]"_"A[num]".jpg"}' test.txt
a1.2012.10.28_09.26.32.jpg
a2.2012.11.20_03.26.32.jpg
a3 xy.2012.10.28_10.26.32.jpg
a4.2012.10.23_09.26.32.jpg
a5 aa.2012.10.28_09.26.35.jpg

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。














站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,