我有一个文件,每行都有一个数字。
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脚本......我怎么能想出那个解决方案呢?任何想法都会很棒......
答案 0 :(得分:2)
这是一个bash 4解决方案,问题是bash没有内置的排序。
修改强> 试图遵循评论,这可能是必要的吗?
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;
答案 1 :(得分:1)
在R:
中使用unique def requestData = [foo:bar]
http.request(POST, ContentType.JSON) {
headers.'Content-Type' = 'application/json'
body = (requestData as JSON).toString()
response.success = { resp, reader ->
println("Success")
jsonReponse = reader.text
}
response.failure = { resp, reader ->
println("Failed, status: " + resp.status)
jsonReponse = reader.text
}
}
或者在perl脚本中,使用哈希:
> 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