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
。