加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

用perl删除文件中多余空格

(2011-07-13 16:13:13)
标签:

杂谈

分类: perl

标  题: 如何用perl去掉空格

我的数据如下:比如有两列
 295     356
    356     369
 113     294
     54       9
 111    140
     74    0.3478
第一列前面有未知个数的空格,第二列前面也是有未知的空格,我应该怎么样去掉空格
然后变成第一列前面没有空格,然后第一列和第二列之间固定的一个空格呢,
试了一下,总是不成功,谢谢

my@totalLines=<Fic>;

foreach$line (@totalLines)
{
    chomp($line);
     @tab=split(/ /,$line);
    print Fic1 "@tab[0] @tab[1]\n";
        
}
-

:
: 我的数据如下:比如有两列
:  295     356
:     356     369
:  113     294
:      54       9
:  111    140
:      74    0.3478
: 第一列前面有未知个数的空格,第二列前面也是有未知的空格,我应该怎么样去掉空格
: 然后变成第一列前面没有空格,然后第一列和第二列之间固定的一个空格呢,
: 试了一下,总是不成功,谢谢
:
: my@totalLines=<Fic>;
:
: foreach$line (@totalLines)
: {
:     chomp($line);
:      @tab=split(/ /,$line);
            split / +/, $line;

:     print Fic1 "@tab[0] @tab[1]\n";
:        
: }
: --
:
: ※ 来源:·水木社区 http://newsmth.net·[FROM: 92.103.53.*]


--
"I cannot keep your waves," says the bank to the river.
"Let me keep your footprints in my heart."
                                  --- Stray Birds, Tagore


是空格和+号吗
什么意思啊,谢谢
我试了一下,可以,但是必须是1和第2个,为什么不是tab[0]和tab[1]呢
tab[0]在这里是什么呢,空格吗?
print Fic1 "@tab[1]@tab[2]\n";
【 在 asker (whoo-ah!) 的大作中提到: 】
:             split / +/, $line;

--

※ 修改:·bluebore 于 Jul 13 16:42:22 2011 修改本文·[FROM: 92.103.53.*]
※ 来源:·水木社区 http://newsmth.net·[FROM: 92.103.53.*]

发信人: Invader (政治局局长 << May Dreaming~~), 信区: Perl
标  题: Re: 如何用perl去掉空格
发信站: 水木社区 (Wed Jul 13 16:46:15 2011), 转信

@tab = split ' ', $line;
print "@tab\n";

see perldoc -f split

【 在 bluebore (新的开始) 的大作中提到: 】
: 是空格和+号吗
: 什么意思啊,谢谢
: 我试了一下,可以,但是必须是1和第2个,为什么不是tab[0]和tab[1]呢
: ...................

--
#!/bin/bash

while read -n $((1 + RANDOM % 3)) str
do
    echo $str
done <<< "俺也会写诗了"


※ 来源:·水木社区 newsmth.net·[FROM: 198.182.56.*]

发信人: yanzg (油炸鬼), 信区: Perl
标  题: Re: 如何用perl去掉空格
发信站: 水木社区 (Wed Jul 13 16:52:18 2011), 转信

空格是空格的意思
+是表示任意多个,但是不少于1个
因为你开头有空格,开头的空格前面的是tab[0]
万一你有一行开头没有空格就会出错

考虑分两步做的话,用一下trim函数

# Perl trim function to remove whitespace from the start and end of the string
sub trim($)
{
        my $string = shift;
        $string =~ s/^\s+//;
        $string =~ s/\s+$//;
        return $string;
}
# Left trim function to remove leading whitespace
sub ltrim($)
{
        my $string = shift;
        $string =~ s/^\s+//;
        return $string;
}
# Right trim function to remove trailing whitespace
sub rtrim($)
{
        my $string = shift;
        $string =~ s/\s+$//;
        return $string;
}






【 在 bluebore (新的开始) 的大作中提到: 】
: 是空格和+号吗
: 什么意思啊,谢谢
: 我试了一下,可以,但是必须是1和第2个,为什么不是tab[0]和tab[1]呢
: ...................

--
哥哥挎筐过宽沟,
快过宽沟看怪狗,
光看怪狗瓜筐扣,
筐扣瓜滚哥怪狗。


※ 修改:·yanzg 于 Jul 13 16:53:31 2011 修改本文·[FROM: 219.239.98.*]
※ 来源:·水木社区 newsmth.net·[FROM: 219.239.98.*]

发信人: Invader (政治局局长 << May Dreaming~~), 信区: Perl
标  题: Re: 如何用perl去掉空格
发信站: 水木社区 (Wed Jul 13 17:00:14 2011), 转信

用不着这么麻烦,perl早就设计好了,见我上面回帖

【 在 yanzg (油炸鬼) 的大作中提到: 】
: 空格是空格的意思
: +是表示任意多个,但是不少于1个
: 因为你开头有空格,开头的空格前面的是tab[0]
: ...................

--
生命是一段挣扎
智慧是一种反抗
未来是一场游戏


※ 来源:·水木社区 newsmth.net·[FROM: 198.182.56.*]
[上一主题] [下一主题]【分页: 1



我的文件内容如下
00-11-5b-50-3b-0f   3           DYNAMIC           10        
00-10-dc-40-70-36   3           DYNAMIC           10        
00-04-61-67-e8-07   3           DYNAMIC           20        
00-50-8d-eb-05-b3   3           DYNAMIC           2          
00-11-5b-36-c4-6c   3           DYNAMIC           4          
可以看到在3、DYNAMIC和最后一列之前空格明显多与一个,我想通过perl使

我的文件内容变为如下
00-11-5b-50-3b-0f   3   DYNAMIC   10        
00-10-dc-40-70-36   3   DYNAMIC   10        
00-04-61-67-e8-07   3   DYNAMIC   20        
00-50-8d-eb-05-b3   3   DYNAMIC   2          
00-11-5b-36-c4-6c   3   DYNAMIC   4
即减少3、DYNAMIC和最后一列之前空格到一个就行了       如何做     请给我代码

while( <> )   {
        s/\s+(\S+)/   $1/g;
        print   ;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有