【问题标题】:Alternative match function perl [closed]替代匹配函数 perl [关闭]
【发布时间】:2015-10-25 15:41:46
【问题描述】:

我有一个文件,每行都有一个数字。

1
7
9
15
22
29
30
30  <--
30  <--
30  <--
40
42
49
50
50  <--
50  <--
55

我不能让数字出现多次。当发现重复时,应将其替换为下一个未使用的号码。

1
7
9
15
22
29
30
31  <--
32  <--
33  <--
40
42
49
50
51  <--
52  <--
55

如果我将表中的一列放入 perl、awk sed bash 脚本...我怎么能想出那个解决方案?任何想法都会很棒......

【问题讨论】:

  • 您是否尝试过任何方法并遇到错误?请张贴那个
  • 试试List::MoreUtils::uniq.. 示例:perl -MList::MoreUtils=uniq -E '@a=uniq(1,1,2,2,3); say "@a"'
  • @Håkon Hægland,这不会产生请求的输出。
  • 假设每一行都有一个数字:perl -nle'print $x = $. == 1 || $_ &gt; $x ? $_ : $x+1'
  • @ikegami 谢谢,你是对的.. 我误读了这个问题。

标签: bash perl awk


【解决方案1】:

这是一个 bash 4 解决方案,问题是 bash 没有内置排序。

编辑 想跟cmets,也许这就是必需品?

declare -A assoc
while read key
do
    while [[ -n ${assoc[$key]} ]]
    do
        (( key++ ))
    done  

    assoc[$key]=1

done < vector.txt

oldIFS="$IFS"
IFS=$'\n'
echo "${!assoc[*]}" | sort -n > out.txt
IFS="$oldIFS"

vector.txt的内容:

1
7
9
15
22
29
30
30
30
30
40
42
49
50
50
50
55

out.txt的内容:

1
7
9
15
22
29
30
31
32
33
40
42
49
50
51
52
55

做同样事情的 Perl 解决方案:

use strict;
use warnings;

my %assoc;
my $fname = 'vector.txt';

open(my $in, $fname) or die "Unable to open '$fname': $!";
while (my $key = <$in>) {

    chomp($key);
    $key++ while exists $assoc{$key};
    $assoc{$key} = undef;

}
close $in;

my @output = sort {$a <=> $b} keys(%assoc);
local $" = "\n";
open(my $out, '>', 'out.txt') or die "Unable to open 'out.txt': $!";
print $out "@output\n";
close $out;

【讨论】:

  • 它不应该只有 30 bur,如上一行中的 30 plus 1 30 plus 2 30 plus 3...你能编辑吗?
  • @sdji:编辑完成了,现在怎么样了?
【解决方案2】:

在 R 中使用 unique

> v<-c(1,7,9,15,22,29,30,30,30,30,40,42,49,50,50,50,55)
> unique(v)

[1]  1  7  9 15 22 29 30 40 42 49 50 55

或者在 perl 脚本中,使用哈希:

my @list = qw(1 7 9 15 22 29 30 30 30 30 40 42 49 50 50 50 55);

my %nums;

$nums{$_}++ foreach @list;

say foreach sort {$a <=> $b } keys %nums;

【讨论】:

  • 如果它可以为任何输入文件执行此操作,其中的数字是每个 ro 1 个数字......
  • @sdji:把它当作练习。不要要求用勺子喂食。
  • 输出也应该是 1 列,每个 ro 都有一个编号
  • @Chankey 这个问题非常清晰且可重复,我只使用最佳实践记号……那应该与蜜蜂太不同……你有什么建议吗?
  • @sdji - 在这些方面问题尚不清楚。请对其进行编辑以反映您实际尝试做的事情
猜你喜欢
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多