2013-10-29 41 views
-5

这是输入如何在Linux中编辑文件并添加换行符?

R0001 893573.56035613.416.60002 893580.06035624.316.80003 893586.56035635.116.91 
R0004 893593.06035646.017.00005 893599.46035656.917.00006 893605.96035667.817.01 

我想这

R0001 893573.56035613.416.6 
0002 893580.06035624.316.8 
0003 893586.56035635.116.91 
R0004 893593.06035646.017.0 
0005 893599.46035656.917.0 
0006 893605.96035667.817.01 

我使用Linux的CentOS 5.4

+9

什么是规则?如何确定应该在哪里插入换行符?你使用什么工具?你有什么尝试?请尽可能多地使用相关信息扩展问题(使用[编辑]链接)。 –

+0

所以你想要27和26个字符长度的交替行?请修改您的问题以使您的需求更加完整。 – shellter

+0

您是否在问如何启动文本编辑器来添加换行符?你问如何以编程方式添加换行符?使用什么语言? – kjhughes

回答

1

假设你的数据在文件命名为 “文件”:

sed -i 's/^\(.\{27\}\)\(.\{26\}\)\(.*\)/\1\n\2\n\3/g' file 

的sed是一个非常强大的文本处理工具,虽然不是最容易使用的(但当y时非常容易你想做一个这样的例子)。 这里是魔法:

“-i”是一个标志在单引号 有它由四个部分由斜杠分隔的指令“为我做这个东西”: 1.命令:“S” - 替代 2.模式:什么要换 3.预期的结果:你想怎么它看起来像 4.范围:“G” - 全球

模式是

\(.\{27\}\)\(.\{26\}\)\(.*\) 

这的意思是“制作一组第27个字母rs排成一行,然后再制作一组下一个26个字符,然后在该行中创建第一组剩余字符“。

预期的结果是

\1\n\2\n\3 

意思是“膏团之一,粘贴新行,糊剂组2,粘贴新行,糊剂组3”。

为了更清楚,你可以把它放在一个脚本:

#!/bin/bash 
COLUMN1=27 
COLUMN2=26 
FILENAME="file"  
sed -i "s/^\(.\{$COLUMN1\}\)\(.\{$COLUMN2\}\)\(.*\)/\1\n\2\n\3/g" file 
exit 0 

为了使脚本打开任何文件编辑器(我使用vim,其他选项的Emacs,纳米,KWrite这样,凯特,geany, gedit ...我可以像这样一整天)并粘贴上面的代码。保存它,关闭编辑器并发出

chmod +x script 

能够执行它。您可以通过

./script 

调用脚本,现在你可以给你的脚本提供的参数,检查“文件”的存在,增加更多的突破点...但是,这是另一回事。

然后你可以使用不同的工具,比如awk(这是我强烈推荐的,但我通常在vim中编写时使用正则表达式,而sed更像Vim,而不是awk,所以我感觉更舒适)。

更多阅读:

http://www.brunolinux.com/02-The_Terminal/Find_and%20Replace_with_Sed.html

http://www.grymoire.com/Unix/Sed.html

http://www.hcs.harvard.edu/~dholland/computers/awk.html

http://www.regular-expressions.info/

0

如果输入在定义in.txt一个可能的解决方案可能是:

#!/usr/bin/perl 
use strict; 
use warnings; 

open (FILE, "<", "in.txt") or die $!; 
while (my $line = <FILE>) { 

my $tmp = join("\n", unpack("(A53)*", $line)); 
my $message = join("\n", unpack("(A27)*", $tmp)); 
print "$message\n"; 

} 
close(FILE); 

我不认为这是最好的解决方案,因为它不适用于排长队。但我在Perl中试了一下。

相关问题