在Linux中显示文件中的特定列
Contents
1. 概述
作为 Linux 用户,我们经常对文件进行各种操作。例如,一种常见的操作是显示文件中的特定列。
在本教程中,我们将讨论实现此目的的各种方法。
2. 显示单列
让我们创建一个文件作为示例。input.txt文件包含长列表格式的ls 命令的输出:
$ cat input.txt
-rw-r--r-- 1 jarvis jarvis 200M Apr 27 22:04 file1.dat
-rw-r--r-- 1 jarvis jarvis 400M Apr 27 22:04 file2.dat
-rw-r--r-- 1 jarvis jarvis 500M Apr 27 22:04 file3.dat
-rw-r--r-- 1 jarvis jarvis 600M Apr 27 22:04 file4.dat
-rw-r--r-- 1 jarvis jarvis 700M Apr 27 22:04 file5.dat
我们可以使用*awk 命令来显示特定的列。让我们打印文件中的第5*列:
$ awk '{print $5}' input.txt
200M
400M
500M
600M
700M
让我们看看我们在awk命令中使用的选项:
- print:它是awk 的内置函数,将文本打印到标准输出流
- $5:它代表第5列的文件大小
请注意,awk使用$N*来表示第 N列。例如,$2 代表第 2列。*
我们还可以使用cut 命令来显示特定的列。让我们使用cut命令打印同一列:
$ cut -d' ' -f5 input.txt
200M
400M
500M
600M
700M
让我们看一下我们在cut命令中使用的选项:
- -d:表示字段分隔符。它的默认值是一个制表符
- -f5 : 它代表第5列的文件大小
3. 显示多列
我们也可以使用awk来显示多列。让我们打印文件名及其大小:
$ awk '{print $9 " " $5}' input.txt
file1.dat 200M
file2.dat 400M
file3.dat 500M
file4.dat 600M
file5.dat 700M
让我们看看我们在awk命令中使用的选项:
- $9:代表第9列的文件名
也可以使用cut命令显示多列。例如,我们可以使用逗号分隔列表指定多个列,如下所示:
$ cut -d' ' -f9,5 input.txt
200M file1.dat
400M file2.dat
500M file3.dat
600M file4.dat
700M file5.dat
请注意,无法使用cut命令重新排列列顺序。所选输入的写入顺序与读取顺序相同。
4. 列的显示范围
有时,当要显示的列数很大时,使用循环会很方便。让我们打印 3 到 8 范围内的所有列:
$ awk '{ for (i = 3; i <= 8; ++i) printf $i" "; print ""}' input.txt
jarvis jarvis 200M Apr 27 22:04
jarvis jarvis 400M Apr 27 22:04
jarvis jarvis 500M Apr 27 22:04
jarvis jarvis 600M Apr 27 22:04
jarvis jarvis 700M Apr 27 22:04
让我们看一下我们在awk命令中使用的选项:
- for:它是awk的循环结构
- printf:它是awk 的内置函数,将格式化文本打印到标准输出流
我们可以使用cut命令来达到同样的效果。它允许我们使用连字符指定一系列列,如下所示:
$ cut -d' ' -f3-8 input.txt
jarvis jarvis 200M Apr 27 22:04
jarvis jarvis 400M Apr 27 22:04
jarvis jarvis 500M Apr 27 22:04
jarvis jarvis 600M Apr 27 22:04
jarvis jarvis 700M Apr 27 22:04
5. 更改awk的字段分隔符
默认情况下,awk使用空格字符作为列分隔符。但是,我们可以根据我们的要求对其进行修改。首先,让我们通过用逗号替换空格来修改我们的原始输入文件。现在修改后的文件如下所示:
$ cat input.txt
-rw-r--r--,1,jarvis,jarvis,200M,Apr 27 22:04,file1.dat
-rw-r--r--,1,jarvis,jarvis,400M,Apr 27 22:04,file2.dat
-rw-r--r--,1,jarvis,jarvis,500M,Apr 27 22:04,file3.dat
-rw-r--r--,1,jarvis,jarvis,600M,Apr 27 22:04,file4.dat
-rw-r--r--,1,jarvis,jarvis,700M,Apr 27 22:04,file5.dat
让我们使用逗号作为列分隔符打印文件名、大小和时间戳:
$ awk -F"," '{print $7 " " $5 " " $6}' input.txt
file1.dat 200M Apr 27 22:04
file2.dat 400M Apr 27 22:04
file3.dat 500M Apr 27 22:04
file4.dat 600M Apr 27 22:04
file5.dat 700M Apr 27 22:04
让我们看看我们在awk命令中使用的选项:
- -F:表示字段分隔符
请注意,在第6列中,为了演示字段分隔符的使用,并未有意将空格替换为逗号。