Chinaunix

标题: perl如何合并文本 [打印本页]

作者: xiaomm250    时间: 2014-04-23 10:54
标题: perl如何合并文本
假设一个文件目录下有很多个txt文件,
但是并不知道文件名.也就是说这些文件名是很杂乱的.
比如:1.txt  2.txt ab.txt dwer.txt等.
对于1.txt里面如果某一行有perl,
则把这行输入到 newfile.txt,如果某一行没有perl,则不输入
对于2.txt里面如果某一行有perl,
则把这行输入到 newfile.txt,如果某一行没有perl,则不输入
.....................
把所有的该目录下面的txt文件都这么搞一下.

请问用perl如何能办到呢?

作者: pitonas    时间: 2014-04-23 12:40
这么搞一下
  1. my $dir = '/your/dir';
  2. @ARGV = glob "$dir/*.txt";

  3. open OUT, '>', 'newfile.txt' or die $!;

  4. while (<>) {
  5.     print OUT $_ if /perl/;
  6. }
复制代码
回复 1# xiaomm250


   
作者: xiaomm250    时间: 2014-04-23 13:30
pitonas 发表于 2014-04-23 12:40
这么搞一下回复 1# xiaomm250


没有任何运行结果
作者: xiaomm250    时间: 2014-04-23 13:40
pitonas 发表于 2014-04-23 12:40
这么搞一下回复 1# xiaomm250


while(<>)
这个<>里面为什么啥都没有呢?


我发现你的是正确的,只是我的文本里面没有包含perl的行
作者: q1208c    时间: 2014-04-23 14:00
grep 'perl' *.txt > newfile.txt
作者: xiaomm250    时间: 2014-04-23 14:06
  1. open(OUT, '>', 'newfile.txt') or die $!;
  2. @files=glob('*.txt');
  3. foreach $file (@files)
  4. {
  5.     open(FH,"<$file") or die $!; @filedata=<FH>; close(FH);
  6.     foreach $line (@filedata)
  7.     {
  8.         print OUT $line;
  9.     }
  10. }
  11. close(OUT);
复制代码
这是我的代码,比较傻的那种代码
作者: xiaomm250    时间: 2014-04-23 14:08
pitonas 发表于 2014-04-23 12:40
这么搞一下回复 1# xiaomm250


代码太简写了,
我翻了小骆驼才明白,
原来<>从@ARGV里面读取数据
作者: skyyy90    时间: 2014-04-23 14:25
学习了,豁然开朗。。。:wink:
作者: xiaomm250    时间: 2014-04-23 14:29
skyyy90 发表于 2014-04-23 14:25
学习了,豁然开朗。。。


怎么豁然开朗了呀?能说说吗?
作者: jason680    时间: 2014-04-23 15:28
回复 1# xiaomm250

1. using grep
  grep "perl" *.txt > newfile

2. using perl
  ### file: grep.pl ####
  #!/usr/bin/perl
  use strict;
  use warnings;

  my $sKey = shift;
  while(<>){
    print  if(m/$sKey/);
  }
   
  ### command ###
  $ ./grep.pl "perl" *.txt > newfile

作者: xiaomm250    时间: 2014-04-24 14:07
jason680 发表于 2014-04-23 15:28
回复 1# xiaomm250

1. using grep



pitonas
2楼的pitonas居然用的是你的签名
作者: jason680    时间: 2014-04-24 14:47
本帖最后由 jason680 于 2014-04-24 14:55 编辑

回复 11# xiaomm250

果然还是误会了,我也一直觉得会“看”错...

才在想如何跟他说......,就收到这个回复

在这先简单澄清
jason680= jason680
pitonas= pitonas
两者没有关系,也互不相识。

最多只能说他对我的签名,有高度认同。
欢迎大家引用认同签名,不要误会成是我本人就可以了
(但其pitonas签名写法会让人误会,会另外通知其修正)

如果大家,认同签名,可使用下面例子:

引用Jason680签名所言:
程序是
依照写出来(的code),跑出结果
不是依照你想出来的,得到结果
  
作者: xiaomm250    时间: 2014-04-24 14:55
jason680 发表于 2014-04-24 14:47
回复 11# xiaomm250

果然还是误会了,我也一直觉得会“看”错...


麻烦问一下,签名是怎么改的,我比较认同你的签名
作者: jason680    时间: 2014-04-24 15:01
回复 13# xiaomm250

最上方的  设置 ==> 个人信息 ==> 个人签名

欢迎引用认同签名,不会产生误会即可。
   
作者: xiaomm250    时间: 2014-04-24 15:11
jason680 发表于 2014-04-24 15:01
回复 13# xiaomm250

最上方的  设置 ==> 个人信息 ==> 个人签名


是不是我的等级还不够高,因此就没有个人签名设置选项??????????
作者: jason680    时间: 2014-04-24 15:20
回复 15# xiaomm250

maybe

sorry, I don't know ...
   
作者: pitonas    时间: 2014-04-24 17:50
{:2_169:} 我被你打败了
你可以用我师傅的图像
我不能用我师傅的签名

回复 11# xiaomm250pitonas
2楼的pitonas居然用的是你的签名



   




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