【Linux】文件格式化与数据处理(printf/awk)

举报
原来是咔咔 发表于 2022/03/27 00:44:22 2022/03/27
【摘要】 序言 如你对Linux的文章感兴趣,可以点击图像查阅更多的文章 1. 格式化打印printf 参数 \a 警告声音输出 \b 倒退键 \f 清除屏幕 \n 输出新的一行 \r 即enter按键 \t 水平的[tab]键 \v 垂直的 [tab] 键 %ns那个n是数字,s代表string,亦即多少个字符; ...

序言

如你对Linux的文章感兴趣,可以点击图像查阅更多的文章

1. 格式化打印printf

  1. 参数

\a 警告声音输出

\b 倒退键

\f 清除屏幕

\n 输出新的一行

\r 即enter按键

\t 水平的[tab]键

\v 垂直的 [tab] 键

%ns那个n是数字,s代表string,亦即多少个字符;

%ni那个n是数字,i代表integer,亦即多少整数码数;

%N.nf那个n与N都是数字,f代表floating(浮点),如果有小数码数假设我共要十个位数,但小数点有两位,即为%10.2f

2. 实例

把这一份数据保存成printf.txt然后实战

Name Chinese English Math Average

DmTsai 80 60 92 77.33

VBird 75 55 80 70.00

Ken 60 90 70 73.33

这是直接查看出来的数据

进行数据处理

参数:%s是显示不固定个数字符,参数本身是%ns,这个n也就代表的多少个字符

参数:t 水平的【tab】按键

printf '%s\t %s\t %s\t %s\t %s\t \n' $(cat printf.txt)

这个就是以你为chinese的长度太长了,导致english中间多了一个tab来将数据排列整齐

所以我们需要给每个字段设置固定的长度

printf '%10s %5i %5i %5i %8.2f \n' $(cat printf.txt | grep -v Name);

2. 解释上边案例的最后

这一串格式看的是有点多,我们来一个一个解释,格式分为五个字段

%10s代表的是长度为10个字符的字串字段

%5i代表的是长度为5个字符的数字字段

至于那个%8.2f代表长度为8个字符的具有小数点的字段,其中有两个小数点有两个字符宽度

grep -v name代表除了name这一行的所有行

  1. 说明$8.2f的意义,还有为什么是%5i

字符宽度12345678   

%8.2f意义:00000.00

如上所述,全部的字符宽度仅有8个字符,整数部分占有5个字符,小数点占一位,小数点后的位数则有俩位

注意一点,这里的字符不是指的是真实数据的字符,而是需要所占的字符个数,是tab之间的距离可以这么理解

2. 在说一个简单的知识点,就是在上图中,我们可以看到所有内容都是向右对齐,这是默认时的显示,但是如果想让一个字符向左对齐的话, 那么也是很简单的,就是给字符前面加行一个    ‘-’ 即可

3. awk:数据处理工具

awk是一个数据处理工具,想较于sed长长用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理。因为awk适合处理小型的数据处理

  1. 取出登录者的信息

last -n 5;

2. 取出账号与ip,并且以【tab】隔开

参数:$1就指的是第一栏,那么$3就指的是第三栏了

last -n 5 | awk '{printf $1 "\t" $3}';

3. 使用awk知道我们的数据有几行,有几栏

参数:NR是目前awk处理的第几行

NF是拥有的字段数

last -n 5 | awk '{print $1 "\t lines:" NR "\t column:" NF}';

4. 我要查阅,第三栏小于 10以下的数据,并且仅列出账号与第三栏

参数:{FS=":"} 代表是以:为分隔符

cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}'

5. 其实这个可以看到第一行并没有显示出来

这是因为我们读入第一行的时候,那些变量$1,$3默认还是以空白键为分割的,所以虽然我们定义了FS,但是只能在第二行生效,这种情况我们可以预先设置awk的变量,利用BEGIN这个关键字

cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t" $3}';

这样就可以把第一行打印出来了

文章来源: blog.csdn.net,作者:咔咔-,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fangkang7/article/details/100576863

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。