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, bc 中的任意一个
  • (RX1|RX2) 任何能够匹配RX1RX2的结果
  • ^ 行首
  • $ 行尾

*+ 在默认情况下是贪婪模式,它们会尽可能多的匹配文本。

可以使用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可以替代grepsed

posted @ 2021-09-25 00:07  zju_cxl  阅读(216)  评论(0编辑  收藏  举报