【问题标题】:perl + shell script + remove all not uniq lines except the first line uniq (FILE NAME) + perl in shell scriptperl + shell script + 删除除第一行 uniq (FILE NAME) + perl in shell script 之外的所有非 uniq 行
【发布时间】:2011-03-10 22:11:51
【问题描述】:

我有以下文件,如何通过sed 删除除第一个唯一FILE NAME 之外的所有FILE NAME 行例如需要从文件中删除除第一个之外的所有FILE NAME 行:

FILE NAME: /dir1/dir2/dir3/dir4/dir5/file

FILE NAME: /dirA/dirB/dirC/dirD/dirE/file

文件:

文件名:/dir1/dir2/dir3/dir4/dir5/file

参数名称:blablabla

目标文件:12

源文件:565

文件名:/dir1/dir2/dir3/dir4/dir5/file

参数名称:blablabla

目标文件:18

源文件:552

文件名:/dir1/dir2/dir3/dir4/dir5/file

参数名称:blablabla

目标文件:14

源文件:559

文件名:/dirA/dirB/dirC/dirD/dirE/file

参数名称:blablabla

目标文件:134

源文件:344

文件名:/dirA/dirB/dirC/dirD/dirE/file

参数名称:blablabla

目标文件:13

源文件:445

文件名:/dirA/dirB/dirC/dirD/dirE/file

参数名称:blablabla

目标文件:13

【问题讨论】:

  • 编程相关问题不应由超级用户提出。请在 stackoverflow.com 上询问
  • @gruntled:请不要告诉人们在 Stack Overflow 或 Server Fault 上提问。如有必要,问题将被迁移到那里。如果您告诉他们在他们倾向于交叉发布的那些网站上提问,这意味着这个问题在迁移时将是重复的。此外,这里可以接受一些脚本问题。
  • 这似乎是使用 sedperl 而不是 awksuperuser.com/questions/152737/… 的重新散列 ...
  • 点了。感谢礼仪课:)
  • 抱歉,还是不清楚你想做什么。您能否在问题中添加更多信息,并对上面的数据进行格式化,以便我们知道文件中的内容以及问题的一部分?我看它的方式,使用 awk 或 perl 会很简单。所以我不得不问,sed 是必需的吗?

标签: perl


【解决方案1】:
$line_count = 0;
open (OLD_FILE, "<$old_file") or die ("Could not open $old_file.");
open (NEW_FILE, ">$new_file") or die ("Could not open $new_file.");
while (<OLD_FILE>) {
    chomp ($_);
    if ($_ =~ /^FILE NAME/) {
        $line_count++;
        if ($line_count > 1) {
            next;
        }
    }
    print NEW_FILE "$_\n";
)
close (FILE);

这会对我们旧文件的每一行进行模式匹配。如果该行以“FILE NAME”开头并且我们已经匹配过一次,那么它将不再将这些行打印到我们的新文件中。

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多