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

简介: 【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


这是直接查看出来的数据


image.png


进行数据处理


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


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


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


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


image.png


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


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


image.png


2. 解释上边案例的最后


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


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


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


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


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


image.png


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


字符宽度12345678  


%8.2f意义:00000.00


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


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


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


image.png


3. awk:数据处理工具


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


取出登录者的信息


last -n 5;


image.png


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


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


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


image.png


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


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


NF是拥有的字段数


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


image.png


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


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


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

image.png



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


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


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


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

image.png

相关文章
|
16天前
|
Linux Perl
Linux|从 STDIN 读取 Awk 输入
Linux|从 STDIN 读取 Awk 输入
20 4
|
22小时前
|
固态存储 Ubuntu Linux
Linux(29) 多线程快速解压缩|删除|监视大型文件
Linux(29) 多线程快速解压缩|删除|监视大型文件
7 1
|
22小时前
|
Ubuntu Linux 数据安全/隐私保护
Linux(24) 如何在Ubuntu中操作rootfs.img文件
Linux(24) 如何在Ubuntu中操作rootfs.img文件
1 0
|
5天前
|
安全 Linux 开发工具
Linux中可引起文件时间戳改变的相关命令
【4月更文挑战第12天】Linux中可引起文件时间戳改变的相关命令
12 0
|
7天前
|
Linux Shell 开发工具
Linux文件常用操作
Linux文件常用操作(几乎覆盖所有日常使用)
71 0
|
8天前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
|
14天前
|
Linux
linux 超过4个G的文件传不上去的解决办法
linux 超过4个G的文件传不上去的解决办法
9 0
|
14天前
|
Linux 索引
linux 文件查找 和文件管理常用命令
linux 文件查找 和文件管理常用命令
21 0
|
16天前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
84 4
|
16天前
|
监控 Linux