我有很多带有命令结果的文件:uniq -c some_file> some_file.out
例如:1.out:
1 a 2 b 4 c
2.out
2 b 8 c
我想合并这些结果,所以我得到:
1 a 4 b 12 c
我认为sort或uniq可以处理它,但我没有看到任何与之相关的选项.编写一些ruby/perl脚本是可行的方法之一,但我想使用core*nix命令(如提到的sort和uniq)轻松地完成它.
编辑:要清楚.我没有原始文件,我必须合并*.out文件.
感谢帮助!
我使用uniq -c一些文本文件.它的输出如下:
123(space)first word(tab)other things
2(space)second word(tab)other things
Run Code Online (Sandbox Code Playgroud)
....
所以我需要提取总数(如上面的123和2),但我无法弄清楚如何,因为如果我按空格分割这一行,它会喜欢这个['123', 'first', 'word(tab)other', 'things'].我想知道它为什么不用标签输出?
以及如何提取shell中的总数?(我终于用python,WTF提取它)
更新:对不起,我没有正确描述我的问题.我不想总和总数,我只想用(制表符)替换(空格),但它不影响单词中的空格,因为我之后仍然需要数据.像这样:
123(tab)first word(tab)other things
2(tab)second word(tab)other things
Run Code Online (Sandbox Code Playgroud) 我使用模块导出的uniq函数,List :: MoreUtils来查找数组中的uniq元素.但是,我希望它以不区分大小写的方式查找uniq元素.我怎样才能做到这一点?
我使用Data :: Dumper转储了Array的输出:
#! /usr/bin/perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
use List::MoreUtils qw(uniq);
use feature "say";
my @elements=<array is formed here>;
my @words=uniq @elements;
say Dumper \@words;
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = [
'John',
'john',
'JohN',
'JOHN',
'JoHn',
'john john'
];
Run Code Online (Sandbox Code Playgroud)
预期的输出应该是:约翰,约翰约翰
只有2个元素,其余全部应该被过滤,因为它们是同一个单词,只有区别在于大小写.
如何删除忽略大小写的重复元素?
尝试从MacOS bash shell中的大文件中提取非英语字符时出现"非法字节序列"错误.这是我尝试使用的脚本:
sed 's/[][a-z,0-9,A-Z,!@#\$%^&*(){}":/_-|. -][\;''=?]*//g' < $1 >Abhineet_extract1.txt;
sed 's/\(.\)/\1\
/g' <Abhineet_extract1.txt | sort | uniq |tr -d '\n' >&1;
rm Abhineet_extract1.txt;
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
uniq: stdin: Illegal byte sequence
Run Code Online (Sandbox Code Playgroud)
"+?
我正在寻找一种在实时日志文件上拖尾的好方法,并显示具有相同日期/时间的行数.
目前这是有效的:
tail -F /var/logs/request.log | [cut the date-time] | uniq -c
Run Code Online (Sandbox Code Playgroud)
但性能不够好.延迟超过一分钟,并且每次以少量线路输出.
任何的想法?
我需要对文本文件进行排序并删除重复项的脚本。大多数(如果不是全部)示例都使用这种sort file1 | uniq > file2方法。在里面man sort中,有一个 -u 选项可以在排序时执行此操作。
有理由使用其中一种而不是另一种吗?也许可以使用 -u 选项?还是内存/速度问题?
我有一个如下所示的文件,我想保留在第三个字段上具有最高值的第一个和第二个字段之间的组合(带有箭头的那些,实际文件中不包含箭头)。
1 1 10
1 1 12 <-
1 2 6 <-
1 3 4 <-
2 4 32
2 4 37
2 4 39
2 4 40 <-
2 45 12
2 45 15 <-
3 3 12
3 3 15
3 3 17
3 3 19 <-
3 15 4
3 15 9 <-
4 17 25
4 17 28
4 17 32
4 17 36 <-
4 18 4 <-
Run Code Online (Sandbox Code Playgroud)
为了有这样的输出:
1 1 12
1 2 6 …Run Code Online (Sandbox Code Playgroud) 参考文件: http : //snap.stanford.edu/data/wiki-Vote.txt.gz
(它是一个磁带存档,其中包含一个名为 的文件Wiki-Vote.txt)
文件中的前几行包含以下内容, head -n 10 Wiki-Vote.txt
# Directed graph (each unordered pair of nodes is saved once): Wiki-Vote.txt
# Wikipedia voting on promotion to administratorship (till January 2008).
# Directed edge A->B means user A voted on B becoming Wikipedia administrator.
# Nodes: 7115 Edges: 103689
# FromNodeId ToNodeId
30 1412
30 3352
30 5254
30 5543
30 7478
3 28
Run Code Online (Sandbox Code Playgroud)
我想找到图中的节点数(尽管它已经在第 3 行中给出)。我运行了以下命令,
awk '!/^#/ { print $1; print $2; }' Wiki-Vote.txt …Run Code Online (Sandbox Code Playgroud) 希望仅打印具有重复的第一个字段的行.例如,从看起来像这样的数据:
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个字符)
我有一个文件,在第一列中有一个名称,在第二列中有计数.它按名称排序.
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来获取相同行的总数,但是如何保留我在数据中的计数?