当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 如何批量合并文件?
帖子发表于 : 2008-10-14 12:38 
头像

注册: 2006-02-10 16:36
帖子: 2653
系统: Xubuntu14.04/Deepin
送出感谢: 13
接收感谢: 25
有cd01.dat cd02.dat ......cd60.dat共60个文件,我想使用cat命令将他们每3个合并为一个文件。如:
cat cd01.dat cd02.dat cd03.dat >part01.dat
cat cd04.dat cd05.dat cd06.dat >part02.dat
如何使用脚本自动完成上述任务?


_________________
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 如何批量合并文件?
帖子发表于 : 2008-10-15 13:31 

注册: 2007-01-28 13:52
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
纯粹为了解决你提的问题,没啥灵活性。。。
代码:
#!/usr/bin/perl -w

use strict;

my $i=1;
my $j=1;
my ($cd,$part);
while ($i < 61){
  ($i<10)?($cd="cd0$i.bat"):($cd="cd$i.bat");
  ($j<10)?($part="part0$j.bat"):($part="part$j.bat");
  system ("cat $cd >> $part");
  if ($i%3 == 0){
    $j++;
  }
  $i++;
}


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 如何批量合并文件?
帖子发表于 : 2008-10-15 15:16 
头像

注册: 2007-08-05 17:40
帖子: 4968
送出感谢: 0 次
接收感谢: 4
楼主真懒!一个循环了事的,还要求人?


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 如何批量合并文件?
帖子发表于 : 2008-10-17 17:53 
头像

注册: 2007-07-05 2:48
帖子: 171
送出感谢: 0 次
接收感谢: 0 次
对于不具有一般性的一次性问题
如果不是太多的话
我宁愿用vim编辑一个脚本
复制粘贴成好多行
再具体修改每一行
然后再执行这个脚本
用熟了vi的话,这个很快的! :em02


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 如何批量合并文件?
帖子发表于 : 2008-10-20 8:38 
头像

注册: 2006-02-10 16:36
帖子: 2653
系统: Xubuntu14.04/Deepin
送出感谢: 13
接收感谢: 25
cnkilior 写道:
楼主真懒!一个循环了事的,还要求人?

我不会bash的,没有办法。另外如何把1变成01,2变成02也让我不知道如何操作。


_________________
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 如何批量合并文件?
帖子发表于 : 2008-10-23 13:36 
头像

注册: 2006-02-10 16:36
帖子: 2653
系统: Xubuntu14.04/Deepin
送出感谢: 13
接收感谢: 25
自己仔细研究了一下,原来可以这样处理:
代码:
for ((i=0;i<20;i++))
do
  joiner=""
  for ((j=1;j<4;j++))
     do
     let k=i*3+j
     if (( $k<10))
          then
             fname=cd0$k.dat
          else
            fname=cd$k.dat
        fi
        joiner=$joiner' '$fname
     done 
  #echo $joiner
  let o=i+1
  if (($o<10))
    then
      oname=part0$o.dat
    else
      oname=part$o.dat
  fi
  cat $joiner > $oname
done

我这个老会计一点也不懒 :em09 :em09


_________________
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 如何批量合并文件?
帖子发表于 : 2008-11-03 5:55 
头像

注册: 2005-10-04 10:59
帖子: 1928
地址: 上海
送出感谢: 0 次
接收感谢: 1
咋都整得那么复杂呢?

代码:
for i in `seq 1 20`; do echo "cat $(seq -s ' ' -f 'cd%02g.dat' $((3*i-2)) $((3*i))) >part$(printf %02g $i).dat";done


输出
代码:
cat cd01.dat cd02.dat cd03.dat >part01.dat
cat cd04.dat cd05.dat cd06.dat >part02.dat
cat cd07.dat cd08.dat cd09.dat >part03.dat
cat cd10.dat cd11.dat cd12.dat >part04.dat
cat cd13.dat cd14.dat cd15.dat >part05.dat
cat cd16.dat cd17.dat cd18.dat >part06.dat
cat cd19.dat cd20.dat cd21.dat >part07.dat
cat cd22.dat cd23.dat cd24.dat >part08.dat
cat cd25.dat cd26.dat cd27.dat >part09.dat
cat cd28.dat cd29.dat cd30.dat >part10.dat
cat cd31.dat cd32.dat cd33.dat >part11.dat
cat cd34.dat cd35.dat cd36.dat >part12.dat
cat cd37.dat cd38.dat cd39.dat >part13.dat
cat cd40.dat cd41.dat cd42.dat >part14.dat
cat cd43.dat cd44.dat cd45.dat >part15.dat
cat cd46.dat cd47.dat cd48.dat >part16.dat
cat cd49.dat cd50.dat cd51.dat >part17.dat
cat cd52.dat cd53.dat cd54.dat >part18.dat
cat cd55.dat cd56.dat cd57.dat >part19.dat
cat cd58.dat cd59.dat cd60.dat >part20.dat


_________________
弄个dropbox空间来备份文件或者做私人代码服务器
配置:git://github.com/roylez/dotfiles.git
主页:http://roylez.heroku.com
各种稀奇玩意儿:http://dooloo.info


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 如何批量合并文件?
帖子发表于 : 2008-11-03 8:46 
头像

注册: 2006-02-10 16:36
帖子: 2653
系统: Xubuntu14.04/Deepin
送出感谢: 13
接收感谢: 25
:em11 遇见高人了。能不能介绍seq的用法?
printf %02g $i 。我从man printf的介绍里面并没有看到使用 %02g这样到格式化方法,是不是哪里有更详细到介绍?


_________________
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 如何批量合并文件?
帖子发表于 : 2008-11-03 9:47 
头像

注册: 2005-10-04 10:59
帖子: 1928
地址: 上海
送出感谢: 0 次
接收感谢: 1
我不是高人。shell script我就知道那么一点点,用python多些。

man printf确实看不到%02g的介绍,但是你看到最后,有see also printf(3),然后你

man 3 printf

就能看到更多内容。%02g其实是标准的C语言格式化输出。

seq就更简单了,就是用来产生一个序列的。man一下就清楚了。

seq 20 =>输出1-20的数字
seq -f "test%g" 5 10 =>输出test05, test06, ...., test10


_________________
弄个dropbox空间来备份文件或者做私人代码服务器
配置:git://github.com/roylez/dotfiles.git
主页:http://roylez.heroku.com
各种稀奇玩意儿:http://dooloo.info


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 如何批量合并文件?
帖子发表于 : 2008-11-03 13:47 
头像

注册: 2006-02-10 16:36
帖子: 2653
系统: Xubuntu14.04/Deepin
送出感谢: 13
接收感谢: 25
俺的see alse里面没有让俺man 3 printf的。俺man 3 printf了没有结果。看来咱两的man不是同一个man。


_________________
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译