missing semester - Data Wrangling
一些数据处理相关的指令
grep
用于查找文件里符合条件的字符串
sed
sed 是一个基于文本编辑器ed构建的”流编辑器” 。
在 sed 中,可以利用一些简短的命令来修改文件,而不是直接操作文件的内容。
最常用的是 s,即替换命令。s 命令的语法如下:s/REGEX/SUBSTITUTION/, 其中 REGEX 部分是我们需要使用的正则表达式,而 SUBSTITUTION 是用于替换匹配结果的文本。
sed 的正则表达式有些时候是比较奇怪的,它需要在这些模式前添加\才能使其具有特殊含义。(添加-E选项将正则表达式解释为扩展的正则)
sed -E 's/.*Disconnected from //'
sort & uniq
sort 会对其输入数据进行排序。
uniq 用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
# Display each line once:
sort file | uniq
# Display only unique lines:
sort file | uniq -u
# Display only duplicate lines:
sort file | uniq -d
# Display number of occurrences of each line along with that line:
sort file | uniq -c
# Display number of occurrences of each line, sorted by the most frequent:
sort file | uniq -c | sort -nr
bc
bc命令是任意精度计算器语言,通常在linux下当计算器用。
# Start `bc` in interactive mode using the standard math library:
bc -l
# Calculate the result of an expression:
bc <<< "(1 + 2) * 2 ^ 2"
# Calculate the result of an expression and force the number of decimal places to 10:
bc <<< "scale=10; 5 / 3"
# Calculate the result of an expression with sine and cosine using `mathlib`:
bc -l <<< "s(1) + c(1)"
正则表达式-Regular expressions
正则表达式通常以 /开始和结束。有一些字符确实具有表示匹配行为的“特殊”含义。比如:
.除换行符之外的”任意单个字符”*匹配前面字符零次或多次+匹配前面字符一次或多次[abc]匹配a,b和c中的任意一个(RX1|RX2)任何能够匹配RX1或RX2的结果^行首$行尾
* 和 + 在默认情况下是贪婪模式,它们会尽可能多的匹配文本。
可以使用regex101网站进行正则表达式的在线调试。
awk
awk 是一种编程语言,它非常善于处理文本。
awk 程序接受一个模式串(可选),以及一个代码块,指定当模式匹配时应该做何种操作。默认当模式串即匹配所有行。
在代码块中,$0 表示整行的内容,$1到 $n 为一行中的 n 个区域,区域的分割基于 awk 的域分隔符(默认是空格,可以通过-F来修改)。
| awk '$1 == 1 && $2 ~ /^c[^ ]*e$/ { print $2 }'
也可像个编程语言一样:BEGIN 也是一种模式,它会匹配输入的开头( END 则匹配结尾)。然后,对每一行第一个部分进行累加,最后将结果输出。
BEGIN { rows = 0 }
$1 == 1 && $2 ~ /^c[^ ]*e$/ { rows += $1 }
END { print rows }
使用awk可以替代grep和sed。

浙公网安备 33010602011771号