Chinaunix

标题: 【求助】求按位分割文件的命令? [打印本页]

作者: Gdla    时间: 2008-04-16 10:13
标题: 【求助】求按位分割文件的命令?
现在输入文件中有很长的一行,要每隔80位后分割这一行然后输出到另外一个文件,
awk好像效率很低,求sed或者其他命令的写法。
input file
  1. 123456789012345678991234567891
复制代码

output file

  1. 1234567890
  2. 1234567899
  3. 1234567891
复制代码

每10为前后的字符都是没有规律的。

[ 本帖最后由 Gdla 于 2008-4-16 10:14 编辑 ]
作者: waker    时间: 2008-04-16 10:16
dd conv=unblock cbs=80 if=inputfile of=outputfile
作者: Gdla    时间: 2008-04-16 10:20
原帖由 waker 于 2008-4-16 10:16 发表
dd conv=unblock cbs=80 if=inputfile of=outputfile

谢谢,sed能实现上面的要求吗?求sed用法。
作者: waker    时间: 2008-04-16 10:26
sed 's/.\{8\}/&\n/g'

1.不能考虑效率
2.用gnu sed
作者: ly5066113    时间: 2008-04-16 10:28
sed 's/.\{10\}/&\n/g'
作者: angeljyt    时间: 2008-04-16 10:59
cut最适合了,按字节, 按字符,按字段分隔
a=123456789012345678991234567891
cut -c1-10 $a
cut -c11-20 $a
cut -c21-30 $a

[ 本帖最后由 angeljyt 于 2008-4-16 11:05 编辑 ]
作者: Gdla    时间: 2008-04-16 11:16
谢谢楼上两位!
原帖由 waker 于 2008-4-16 10:16 发表
dd conv=unblock cbs=80 if=inputfile of=outputfile

用dd有一个问题,就是80位之前的space会被trim掉,请问不会trim space的参数?
作者: waker    时间: 2008-04-16 11:55
标题: 回复 #7 Gdla 的帖子
不知道什么是trim space
作者: Gdla    时间: 2008-04-16 12:07
原帖由 waker 于 2008-4-16 11:55 发表
不知道什么是trim space

就是空格被切掉了,空格本来应该是保留的
  1. 1234 67890
复制代码

应该得到

  1. 1234[ ]
  2. 67890
复制代码

而不是

  1. 1234[]
  2. 67890
复制代码

dd命令的参数
unblock  Treats the input as a sequence of fixed length records
                       independent of input and output block boundaries.  The
                       length of the input records is specified by the cbs op-
                       erand.  Any trailing space characters are discarded and
                       a newline character is appended.


[ 本帖最后由 Gdla 于 2008-4-16 12:09 编辑 ]
作者: waker    时间: 2008-04-16 12:47
用gnu dd
作者: waker    时间: 2008-04-16 13:04
哦,看懂了,如果第Nx80个字符正好是空格它以及前面连续的空格就会被吃掉,这没办法,unblock是为block设计的,不是为切文件设计的
作者: forlorngenius    时间: 2008-04-16 13:14
原帖由 Gdla 于 2008-4-16 10:13 发表
现在输入文件中有很长的一行,要每隔80位后分割这一行然后输出到另外一个文件,
awk好像效率很低,求sed或者其他命令的写法。
input file
123456789012345678991234567891
output file

1234567890
1234 ...



这种问题flw怎么还不出现。嗬嗬,我写个perl的

#!/usr/bin/perl -w
use strict;
my $line = "123456789012345678991234567891";
my @var = unpack("A10A10A10", $line);
foreach (@var)
{print $_;
print "\n";
}




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2