希望仅打印具有重复的第一个字段的行.例如,从看起来像这样的数据:
1 abcd
1 efgh
2 ijkl
3 mnop
4 qrst
4 uvwx
Run Code Online (Sandbox Code Playgroud)
应打印出来:
1 abcd
1 efgh
4 qrst
4 uvwx
Run Code Online (Sandbox Code Playgroud)
(仅供参考 - 我的数据中第一个字段的长度不总是1个字符)
有这种结构的数据.将按'c'按升序排列.
[ { 'a' => 1, 'b' => 1, 'c' => 1, 'd' => '?' },
{ 'a' => 1, 'b' => 1, 'c' => 2, 'd' => '?' },
{ 'a' => 1, 'b' => 1, 'c' => 3, 'd' => '?' },
{ 'a' => 1, 'b' => 2, 'c' => 4, 'd' => '?' },
{ 'a' => 1, 'b' => 2, 'c' => 5, 'd' => '?' },
{ 'a' => 2, 'b' => 1, 'c' …Run Code Online (Sandbox Code Playgroud) 我目前遇到一个非常简单的问题,即从反引用的shell命令中捕获输出.我很抱歉问题很简单.
我有一些排序数组(@valid_runs),我知道它包含连续的重复元素.我想使用反引号将此数组回显给uniq.我想捕获数组中的STDOUT.我试图这样做.
@unique_valids = `echo '@valid_runs' | uniq`;
print @unique_valids;
Run Code Online (Sandbox Code Playgroud)
这个打印声明什么都没有.就此而言,这也不是.
@unique_valids = `echo '@valid_runs'`;
print @unique_valids;
Run Code Online (Sandbox Code Playgroud)
我知道如何使用uniq和echo.这对我来说似乎很奇怪.我认为这与perl数组有关,而不是正确使用这些命令.我在其他地方搜索了一下,所以请不要因为解决方案看起来微不足道而感谢我.感谢你的宝贵时间.
关于解决方案的说明:TLP的解决方案是处理uniq问题最直接的解决方案.我很灵活,因为所有的回复都表明没有系统调用这个问题.如果Perl的uniq功能与Unix的uniq相同,那么数组应该保持排序.
如果您不关心排序结果,John Corbett的解决方案效果很好.
我有一个文件,在第一列中有一个名称,在第二列中有计数.它按名称排序.
dan 3355
dan 667
dan 889
frank 8
frank 99
frank 90
ian 9
Run Code Online (Sandbox Code Playgroud)
我想结合所有相同的名称并输出每个名称的总数:
dan 4911
frank 197
ian 9
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用uniq来获取相同行的总数,但是如何保留我在数据中的计数?
给定如下文件:-
01/09/2005
02/09/2005
03/09/2006
03/09/2006
Run Code Online (Sandbox Code Playgroud)
我希望比较最后两行是否相同,如果相同则返回 1,否则返回 0。
我可以使用最后两个 cat tail -2
来自维基百科:
uniq
-c Generate an output report in default style except that each line is preceded by a count of the number of times it occurred. If this option is specified, the -u and -d options are ignored if either or both are also present.
Run Code Online (Sandbox Code Playgroud)
在我的机器上,它取计数并将其放在每一行的开头.我想要的是将它放在行尾,逗号后面.如何才能做到这一点?
例:
aa
aa
bb
cc
cc
dd
Run Code Online (Sandbox Code Playgroud)
应改为:
aa,2
bb,1
cc,2
dd,1
Run Code Online (Sandbox Code Playgroud) 所以我有一个文件,如:
10 1 abc
10 2 def
10 3 ghi
20 4 elm
20 5 nop
20 6 qrs
30 3 tuv
Run Code Online (Sandbox Code Playgroud)
我想为第一列的每个值获取第二列的最大值,即:
10 3 ghi
20 6 qrs
30 3 tuv
Run Code Online (Sandbox Code Playgroud)
如何使用awk或类似的unix命令?
uniq -c (或替代方案)中是否有一个选项不会在计数周围添加额外的空格?目前我通常通过 sed 进行管道传输,如下所示:
sort | uniq -c | sed 's/^ *\([0-9]*\) /\1 /'
Run Code Online (Sandbox Code Playgroud)
但这似乎有点多余,特别是考虑到我必须经常这样做。
我有以下输入:
no,zadrar,MENTOR,rossana@xt.com,AGRATE
no,mittalsu,MENTOR,rossana@xt.com,GREATER NOIDA
no,abousamr,CADENCE,selim@xt.com,CROLLES
no,lokinsks,MENTOR,sergey@xt.com,CROLLES
no,billys,MENTOR,billy@xt.com,CROLLES
no,basiles1,CADENCE,stephane@xt.com,CASTELLETTO
no,cesaris1,CADENCE,stephane@xt.com,CROLLES
Run Code Online (Sandbox Code Playgroud)
我只想获取第 4 列唯一的行:
no,abousamr,CADENCE,selim@xt.com,CROLLES
no,lokinsks,MENTOR,sergey@xt.com,CROLLES
no,billys,MENTOR,billy@xt.com,CROLLES
Run Code Online (Sandbox Code Playgroud)
我尝试过:
awk -F"," '{print $4}' $vendor.csv | sort | uniq -u
Run Code Online (Sandbox Code Playgroud)
但我得到:
selim@xt.com
sergey@xt.com
billy@xt.com
Run Code Online (Sandbox Code Playgroud) 我有一个带有某些值的 HoA。
我只需要来自 HoA 的独特元素。
预期结果:
Key:1
Element:ABC#DEF
Key:2
Element:XYZ#RST
Key:3
Element:LMN
Run Code Online (Sandbox Code Playgroud)
下面是我的脚本:
#!/usr/bin/perl
use strict; use warnings;
use Data::Dumper;
my %Hash = (
'1' => ['ABC', 'DEF', 'ABC'],
'2' => ['XYZ', 'RST', 'RST'],
'3' => ['LMN']
);
print Dumper(\%Hash);
foreach my $key (sort keys %Hash){
print "Key:$key\n";
print "Element:", join('#', uniq(@{$Hash{$key}})), "\n";
}
sub uniq { keys { map { $_ => 1 } @_ } };
Run Code Online (Sandbox Code Playgroud)
该脚本向我抛出以下错误:
Experimental keys on scalar is now forbidden at test.pl line 19. …Run Code Online (Sandbox Code Playgroud)