shell command

|
Document-edit Created with Sketch.
|

记录些有用的命令

rsync

rsync -av --progress source/ destination/
cp命令复制太慢也不显示进度,此命令较快且可以知道进度
参数说明: -a:归档模式,保留文件属性(如权限、时间戳等),并递归复制目录。

-v:显示详细输出,便于跟踪进度。

--progress:显示复制进度。

为什么 rsync 更快?
增量传输:rsync 只复制源和目标之间不同的部分,而不是整个文件。

压缩传输:可以通过 -z 参数启用压缩,减少传输数据量。

高效算法:rsync 使用高效的算法来比较文件差异,减少不必要的复制。

加速复制的额外选项
**⚪ 启用压缩:**如果复制大量小文件或网络传输,可以启用压缩:
rsync -avz --progress source/ destination/
**⚪ 并行复制:**对于大量小文件,可以使用 –progress 和 –partial 来加速:
rsync -av --progress --partial source/ destination/
**⚪ 多线程复制:**如果需要更快速度,可以使用 rsync 的多线程功能(需要较新版本的 rsync):
rsync -av --progress --partial --inplace --rsh="ssh -T -c aes128-ctr -o Compression=no -x" source/ destination/

**注意事项 ** 源路径的斜杠:

如果源路径以斜杠结尾(如 source/),rsync 会复制目录内容到目标路径。

如果源路径不以斜杠结尾(如 source),rsync 会复制整个目录到目标路径。

目标路径:

如果目标路径不存在,rsync 会自动创建。

网络传输:

如果源和目标位于不同机器,可以通过 SSH 使用 rsync:
rsync -avz --progress -e ssh user@remote:/source/ /destination/

awk

处理大型数据该命令非常高效,且无需其它环境

awk '{sum += ($2 < 0 ? -$2 : $2); count++} END {print sum/count}' data.txt

例如计算data.txt第二列数据绝对值和的平均值,秒出结果!!!

awk 是一种强大的文本处理工具,专门用于逐行处理和分析结构化文本数据(如 CSV、日志文件等)。它的名字来源于其三位创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母。

awk 的基本工作原理是:

逐行读取输入文件。

根据指定的规则(模式)匹配行。

对匹配的行执行相应的操作(动作)。

awk 'pattern { action }' input_file

**pattern:**匹配行的条件(可选)。如果省略,则对所有行执行 action。

**action:**对匹配行执行的操作(可选)。如果省略,则默认打印匹配的行。

**input_file:**输入文件。如果省略,则从标准输入读取数据。

常用变量 $0:整行内容。

$1, $2, …, $N:第 1、2、…、N 列的内容(默认以空格或制表符分隔)。

NF:当前行的列数。

NR:当前行的行号。

FS:输入字段分隔符(默认是空格或制表符)。

OFS:输出字段分隔符(默认是空格)。

示例文件 假设有一个文件 data.txt,内容如下:

1   10.5   A
2  -3.2    B
3   7.8    C
4  -1.1    D 

打印整行

awk '{print $0}' data.txt

打印指定列
打印第二列:

awk '{print $2}' data.txt

条件过滤
打印第二列大于 0 的行:

awk '$2 > 0 {print $0}' data.txt

计算列的平均值
计算第二列的平均值:

awk '{sum += $2; count++} END {print sum/count}' data.txt

修改字段分隔符
如果文件是以逗号分隔的 CSV 文件,可以修改 FS:

awk -F, '{print $2}' data.csv

取绝对值并计算平均值
对第二列取绝对值并计算平均值:

awk '{sum += ($2 < 0 ? -$2 : $2); count++} END {print sum/count}' data.txt

添加行号
打印每行内容并添加行号:

awk '{print NR, $0}' data.txt

多条件匹配
打印第二列大于 0 且第三列是 “A” 或 “B” 的行:

awk '$2 > 0 && ($3 == "A" || $3 == "B") {print $0}' data.txt

附录

参考文章

Licensed under CC BY-NC-SA 4.0 转载请留言告知
最后更新于 Apr 16, 2025 05:19 UTC
使用 Hugo 构建
主题 StackJimmy 设计
本博客已稳定运行