【Linux】文件格式化与数据处理(printf/awk)
序言
如你对Linux的文章感兴趣,可以点击图像查阅更多的文章
1. 格式化打印printf
-
参数
\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这一行的所有行
-
说明$8.2f的意义,还有为什么是%5i
字符宽度12345678
%8.2f意义:00000.00
如上所述,全部的字符宽度仅有8个字符,整数部分占有5个字符,小数点占一位,小数点后的位数则有俩位
注意一点,这里的字符不是指的是真实数据的字符,而是需要所占的字符个数,是tab之间的距离可以这么理解
2. 在说一个简单的知识点,就是在上图中,我们可以看到所有内容都是向右对齐,这是默认时的显示,但是如果想让一个字符向左对齐的话, 那么也是很简单的,就是给字符前面加行一个 ‘-’ 即可
3. awk:数据处理工具
awk是一个数据处理工具,想较于sed长长用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理。因为awk适合处理小型的数据处理
-
取出登录者的信息
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
- 点赞
- 收藏
- 关注作者
评论(0)