awk基础
基本语法:awk -[vFf] Pattern { Action }
-[vFf]为参数;Pattern 为模式;Action 为操作
如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。
获取文件的行数
可以不指定文件名称,利用管道“|”,从标准输入读取文件内容,并输出文件的行数
cat nowcoder.txt | wc -l
wc -l < nowcoder.txt
读取文件几行
查看文件的前5行,可以使用head命令,如
head -5 filename
查看文件的后5行,可以使用tail命令,如:
tail -5 filename 或 tail -n 5 filename
查看文件中间一段,你可以使用sed命令,如:
sed -n ‘5,20p’ filename
这样你就可以只查看文件的第5行到第20行。
输出7的倍数
for num in {0..500..7}; do
echo "${num}"
done
输出文本的第五行内容
首先取出前五行,再取出它的末尾
head -n 5 nowcoder.txt | tail -n 1
head 从头开始打印,tail 从未开始打印,sed 从中间开始打印
sed -n 5p
输出文件中空行的行号
-
正则匹配空行\s(匹配任何空白字符:包括空格,制表符,换页符等等.等价于[ \f\n\r\t\v])且输出带行号. ^匹配输入字符串的开始位置,KaTeX parse error: Undefined control sequence: \s at position 25: …束位置.该题匹配空行可以用 ^\̲s̲* 作为目标正则,不是唯一,可根据正则语法自行灵活搭配拆分;
-
grep使用: -n: 输出行号
-
/作为包含awk正则匹配模式的符号, NR属于awk内部变量,代表:已经读出的记录数,就是行号;
-
sed使用: -n:使用安静(silent)模式; //是sed正则表达式匹配模式, 最后一个=,=作为sed命令打印行号: 例如(sed = nowcoder.txt),该命令会输出文件内容,且给每一行都加上行号,但是行号都在对应行内容的上一行,独立成行,因此使用-n,忽略内容等输出,只有经过sed特殊处理的那一行(或者动作)才会被列出来;
-
awk是数据解析工具 对文件或管道数据、终端输入数据逐行解析 默认以空格分隔
awk语法:awk ‘pattern{命令}’ 文件名
pattern /^/是正则表达式匹配,/正则表达式/是正则表达式匹配是字符串开始标记/ 是正则表达式匹配,/正则表达式/ 是正则表达式匹配 ^是字符串开始标记/是正则表达式匹配,/正则表达式/是正则表达式匹配
是
字符串开始标记是字符串结束标记 /^$/表示空字符串即该行是空字符串即空行
{}是对匹配的行执行的命令 NR是行号,即匹配行的行号
grep -n '^\s*$' nowcoder.txt
awk '/^$/{print NR}' nowcoder.txt
sed -n '/^\s*$/=' nowcoder.txt
去掉文件的空行
awk 命令,判断当前行的内容然后输出
$0代表改行的全部,然后以空格为分界线,$1输出第一部分,$2输出第二部分
awk '{if($0 != "") {print $0}}' ./nowcoder.txt
awk '!/^$/ {print $NF}'
-F /表示以 ’/’ 分开域
NF 表示的是浏览记录的域的个数
$NF 表示的最后一个Field(列),即输出最后一个字段的内容
cat 输出文本内容,然后通过管道符交由 awk 做非空校验然后输出
cat ./nowcoder.txt | awk NF
grep 命令
-v 显示不包含匹配文本的所有行
grep -v '^$'
-e 指定字符串做为查找文件内容的样式
grep -e '\S'