我有Apache日志文件,access.log如何计算该文件中出现的行数?例如的结果cut -f 7 -d ' ' | cut -d '?' -f 1 | tr '[:upper:]' '[:lower:]'是
a.php
b.php
a.php
c.php
d.php
b.php
a.php
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
3 a.php
2 b.php
1 d.php # order doesn't matter
1 c.php
Run Code Online (Sandbox Code Playgroud) 你如何du -sh /dir/*按大小排序?我读过一个网站说使用,| sort -n但这显然是不对的。这是一个错误的例子。
[~]# du -sh /var/* | sort -n
0 /var/mail
1.2M /var/www
1.8M /var/tmp
1.9G /var/named
2.9M /var/run
4.1G /var/log
8.0K /var/account
8.0K /var/crash
8.0K /var/cvs
8.0K /var/games
8.0K /var/local
8.0K /var/nis
8.0K /var/opt
8.0K /var/preserve
8.0K /var/racoon
12K /var/aquota.user
12K /var/portsentry
16K /var/ftp
16K /var/quota.user
20K /var/yp
24K /var/db
28K /var/empty
32K /var/lock
84K /var/profiles
224M /var/netenberg
235M /var/cpanel
245M /var/cache
620M /var/lib
748K /var/spool
Run Code Online (Sandbox Code Playgroud) 我正面临一个巨大的 4 列文件。我想根据第 3 列在标准输出中显示排序的文件:
cat myFile | sort -u -k3
Run Code Online (Sandbox Code Playgroud)
这足以执行这个技巧吗?
我有一堆从log1到log164.
我正在尝试在 UNIX 终端中列出目录(已排序),但排序功能仅提供如下格式:
home:logs Home$ ls -1 | sort
log1.gz
log10.gz
log100.gz
log101.gz
log102.gz
log103.gz
log104.gz
log105.gz
log106.gz
...etc
Run Code Online (Sandbox Code Playgroud)
我想要的是
home:logs Home$ ls -1 | sort
log1.gz
log2.gz
log3.gz
log4.gz
log5.gz
log6.gz
log7.gz
...{more here}
log99.gz
log100.gz
log101.gz
log102.gz
...etc
Run Code Online (Sandbox Code Playgroud)
我可以用来做什么的任何建议?
我在任何地方看到有人需要获得一个排序的、唯一的列表,他们总是通过管道传输到sort | uniq. 我从未见过有人使用的例子sort -u。为什么不?有什么区别,为什么使用 uniq 比使用 unique 标志进行排序更好?
我正在尝试对多列进行排序。结果并不如预期。
这是我的数据(people.txt):
Simon Strange 62
Pete Brown 37
Mark Brown 46
Stefan Heinz 52
Tony Bedford 50
John Strange 51
Fred Bloggs 22
James Bedford 21
Emily Bedford 18
Ana Villamor 44
Alice Villamor 50
Francis Chepstow 56
Run Code Online (Sandbox Code Playgroud)
以下工作正常:
bash-3.2$ sort -k2 -k3 <people.txt
Emily Bedford 18
James Bedford 21
Tony Bedford 50
Fred Bloggs 22
Pete Brown 37
Mark Brown 46
Francis Chepstow 56
Stefan Heinz 52
John Strange 51
Simon Strange 62
Ana Villamor 44
Alice Villamor 50 …Run Code Online (Sandbox Code Playgroud) 我需要能够在将其输出find到命令之前按字母顺序对输出进行排序。进入| sort |之间不起作用,那我该怎么办?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
Run Code Online (Sandbox Code Playgroud) 我是盲人还是没有类似的--in-place选择sort?
为了将结果保存到输入文件,sed 使用-i( --in-place)。
将输出重定向sort到输入文件
sort < f > f
Run Code Online (Sandbox Code Playgroud)
导致它为空。如果没有--in-place选择 - 也许有一些技巧可以方便地做到这一点?
(我唯一想到的是:
sort < f > /tmp/f$$ ; cat /tmp/f$$ > f ; rm /tmp/f$$
Run Code Online (Sandbox Code Playgroud)
移动不是正确的选择,因为可能会更改文件权限。这就是为什么我用临时文件的内容覆盖,然后将其删除。)
我真的很喜欢使用control+r递归搜索我的命令历史记录。我发现了一些我喜欢与它一起使用的好选择:
# ignore duplicate commands, ignore commands starting with a space
export HISTCONTROL=erasedups:ignorespace
# keep the last 5000 entries
export HISTSIZE=5000
# append to the history instead of overwriting (good for multiple connections)
shopt -s histappend
Run Code Online (Sandbox Code Playgroud)
对我来说唯一的问题是erasedups只删除连续的重复项 - 所以使用这串命令:
ls
cd ~
ls
Run Code Online (Sandbox Code Playgroud)
该ls命令实际上将被记录两次。我想过定期使用 cron 运行:
cat .bash_history | sort | uniq > temp.txt
mv temp.txt .bash_history
Run Code Online (Sandbox Code Playgroud)
这将实现删除重复项,但不幸的是顺序不会被保留。如果我不先sort处理文件,我不相信uniq可以正常工作。
如何删除 .bash_history 中的重复项,保留顺序?
.bash_history通过脚本覆盖文件有什么问题吗?例如,如果您删除了一个 apache 日志文件,我认为您需要发送一个 nohup / reset 信号 …
我从一个程序中获取输出,该程序首先生成一行,即一堆列标题,然后是一堆数据行。我想剪切此输出的各个列并查看它根据各个列排序。在没有标题的情况下,通过-k选择与列sort一起cut或awk查看列的子集,可以轻松完成剪切和排序。但是,这种排序方法将列标题与输出的其余行混合在一起。有没有一种简单的方法可以将标题保持在顶部?