免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何按指定格式输出文本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-04-15 10:48 |只看该作者 |倒序浏览
本帖最后由 liucheng1513 于 2019-04-15 14:31 编辑

输出内容如下


    <Play>
         <FileName>A390A15FEF2B.mp4</FileName>
         <Long>59</Long>
         <Start>00:00:00</Start>
     </Play>
     <Play>
         <FileName>ACACF15B7E7A7F6.mp4</FileName>
         <Long>206</Long>
         <Start>00:00:59</Start>
     </Play>
     <Play>
         <FileName>54354345345.mp4</FileName>
         <Long>30</Long>
            <Start>00:04:25</Start>
     </Play>

.......一直 循环到 23:59:59

     <Play>
         <FileName>fgbfdgvg3453.mp4</FileName>
         <Long>300</Long>
            <Start>23:56:47</Start>
     </Play>


已知文件列表,和列表内文件对应的时长

media.txt
A390A15FEF2B.mp4
ACACF15B7E7A7F6.mp4
54354345345.mp4
fgbfdgvg3453.mp4


size.txt
[A390A15FEF2B.mp4]

long=59
size=11692742
[ACACF15B7E7A7F6.mp4]
long=206
size=36857462
[54354345345.mp4]
long=30
size=39076061
[fgbfdgvg3453.mp4]
long=300
size=2481829

#!/bin/bash
cat /media.txt|awk '{print $1}'|while read file_name;
do
get_size=` awk -F '=' '/\['$file_name'\]/{a=1}a==1&&$1~/size/{print $2;exit}' /size.txt | sed s/[[:space:]]//g`
get_long=` awk -F '=' '/\['$file_name'\]/{a=1}a==1&&$1~/long/{print $2;exit}' /size.txt | sed s/[[:space:]]//g`
echo "<Play>" >>/play.txt
echo "<FileName>"$file_name"</FileName>" >>/play.txt
echo "<Size>"$get_size"</Size>" >>/play.txt
echo "<Long>"$get_long"</Long>" >>/play.txt
echo "<Start>"00:00:00"</Start>" >>/play.txt
echo "</Play>" >>/play.txt
done;


FileName为文件名,Long为视频播放长度(秒),Start为播放的时间,即从每天的00:00:00  时间  按照指定时间循环播放到23:59:59,播放第一个文件的时间是 00:00:00,播放第二文件的时间是00:00:00   +  第一个文件播放时 时长(59秒)00:00:59,如何将数据从数据按指定格式显示,start时间需要自动叠加,现在的难点在于Start时间怎么循环




论坛徽章:
0
2 [报告]
发表于 2019-04-15 13:01 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2019-04-15 13:29 |只看该作者
回复 2# 本友会机友会摄友会


列表和列表内文件的播放是长是已知的,现在不知道怎么写出循环,并控制循环的时间



media.txt
A390A15FEF2B.mp4
ACACF15B7E7A7F6.mp4
54354345345.mp4
fgbfdgvg3453.mp4




size.txt
[config]
[A390A15FEF2B.mp4]

long=59
size=11692742
[ACACF15B7E7A7F6.mp4]
long=206
size=36857462
[54354345345.mp4]
long=30
size=39076061
[fgbfdgvg3453.mp4]
long=300
size=2481829


论坛徽章:
0
4 [报告]
发表于 2019-04-15 13:44 |只看该作者
本帖最后由 nuclearxin 于 2019-04-15 13:50 编辑

环境?播放工具?直接用播放工具的 高级功能吧
configparser + xml  python吧

论坛徽章:
0
5 [报告]
发表于 2019-04-15 14:33 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2019-04-15 15:40 |只看该作者
回复 5# 本友会机友会摄友会

给一个安卓的播放器制作播放列表,这个是生成24小时的播放列表,就是从每天的00:00:00----23:59:59   ,到了start的时间就播放指定的内容,播放列表是按照media.txt内的 文件 ,获取size.txt内的 时间生成 ,循环media.txt内的文件生成时间列表,

论坛徽章:
0
7 [报告]
发表于 2019-04-15 16:33 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2019-04-15 17:24 |只看该作者
回复 7# 本友会机友会摄友会

Linux 生成

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
9 [报告]
发表于 2019-04-16 15:29 |只看该作者
本帖最后由 cfwyy 于 2019-04-16 16:24 编辑

awk, 只用到了size.txt,因为有文件名了。仅供参考。test.awk
  1. function printSeg(FileName,Long,Start) {
  2.     printf("<Play>\n\t<FileName>%s</FileName>\n\t<Long>%s</Long>\n\t<Start>%s</Start>\n</Play>\n",FileName,Long,Start)
  3. }

  4. #date -d 计算时间,返回 d-HH:MM:SS
  5. function calcStart(Start,Long,s) {
  6.     cmdstr=sprintf("date -d \"%s %ssec\" +%%d-%%H:%%M:%%S |tr -d \"\\n\"",Start,Long)
  7.     cmdstr | getline s  
  8.     return s
  9. }

  10. #计算未超过23:59:59的播放开始时间
  11. function calcAllStart(startTime,i,t) {
  12.     startTime="00:00:00"
  13.     StartArr[1]=startTime
  14.     "date +%d|tr -d \"\\n\"" |getline nowday
  15.     for (i=2;i<=length(LongArr);i++)
  16.         {
  17.             split(calcStart(StartArr[i-1],LongArr[fileNameArr[i-1]]),t,"-")
  18.             if (t[1]==nowday) #同一天,就认为未超过23:59:59
  19.                 StartArr[i]=t[2]
  20.             else
  21.                 break
  22.         }
  23. }
  24. BEGIN        {
  25.     RS="["
  26. }
  27. NR>1{
  28.     split($2,tmp,"=")
  29.     long=tmp[2]
  30.     fn=substr($1,1,length($1)-1)
  31.     fileNameArr[++k]=fn   #文件名数组
  32.     LongArr[fn]=long      #时长数组,以文件名为索引
  33. }
  34. END        {
  35.     calcAllStart()   
  36.     for (i=1;i<=length(StartArr);i++)
  37.         printSeg(fileNameArr[i],LongArr[fileNameArr[i]],StartArr[i])
  38. }
复制代码

  1. awk -f test.awk size.txt
复制代码




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP