shell真题

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'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值