如何批量合并文件?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
百草谷居士
帖子: 4025
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

如何批量合并文件?

#1

帖子 百草谷居士 » 2008-10-14 12:38

有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
如何使用脚本自动完成上述任务?
Mint 22 / Xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
yhywl
帖子: 13
注册时间: 2007-01-28 13:52

Re: 如何批量合并文件?

#2

帖子 yhywl » 2008-10-15 13:31

纯粹为了解决你提的问题,没啥灵活性。。。

代码: 全选

#!/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++;
}
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

Re: 如何批量合并文件?

#3

帖子 cnkilior » 2008-10-15 15:16

楼主真懒!一个循环了事的,还要求人?
头像
goodluck1982
帖子: 171
注册时间: 2007-07-05 2:48

Re: 如何批量合并文件?

#4

帖子 goodluck1982 » 2008-10-17 17:53

对于不具有一般性的一次性问题
如果不是太多的话
我宁愿用vim编辑一个脚本
复制粘贴成好多行
再具体修改每一行
然后再执行这个脚本
用熟了vi的话,这个很快的! :em02
头像
百草谷居士
帖子: 4025
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

Re: 如何批量合并文件?

#5

帖子 百草谷居士 » 2008-10-20 8:38

cnkilior 写了:楼主真懒!一个循环了事的,还要求人?
我不会bash的,没有办法。另外如何把1变成01,2变成02也让我不知道如何操作。
Mint 22 / Xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
百草谷居士
帖子: 4025
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

Re: 如何批量合并文件?

#6

帖子 百草谷居士 » 2008-10-23 13:36

自己仔细研究了一下,原来可以这样处理:

代码: 全选

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
Mint 22 / Xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
roylez
帖子: 1928
注册时间: 2005-10-04 10:59
来自: 上海

Re: 如何批量合并文件?

#7

帖子 roylez » 2008-11-03 5:55

咋都整得那么复杂呢?

代码: 全选

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空间来备份文件或者做私人代码服务器
配置:[url]git://github.com/roylez/dotfiles.git[/url]
主页:http://roylez.heroku.com
各种稀奇玩意儿:http://dooloo.info
头像
百草谷居士
帖子: 4025
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

Re: 如何批量合并文件?

#8

帖子 百草谷居士 » 2008-11-03 8:46

:em11 遇见高人了。能不能介绍seq的用法?
printf %02g $i 。我从man printf的介绍里面并没有看到使用 %02g这样到格式化方法,是不是哪里有更详细到介绍?
Mint 22 / Xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
roylez
帖子: 1928
注册时间: 2005-10-04 10:59
来自: 上海

Re: 如何批量合并文件?

#9

帖子 roylez » 2008-11-03 9:47

我不是高人。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空间来备份文件或者做私人代码服务器
配置:[url]git://github.com/roylez/dotfiles.git[/url]
主页:http://roylez.heroku.com
各种稀奇玩意儿:http://dooloo.info
头像
百草谷居士
帖子: 4025
注册时间: 2006-02-10 16:36
系统: debian12/xubuntu2404

Re: 如何批量合并文件?

#10

帖子 百草谷居士 » 2008-11-03 13:47

俺的see alse里面没有让俺man 3 printf的。俺man 3 printf了没有结果。看来咱两的man不是同一个man。
Mint 22 / Xubuntu 24.04

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
回复