如何在 Linux 中显示文件的特定列?


概述

我们经常在 Linux 系统上执行各种文件操作。最常见的操作之一是从文本文档中显示某些列。

在这里,我们将介绍实现此目的的不同方法。

显示单个列

让我们为我们的示例创建一个新文件夹。input.txt 文件包含 ls -l 命令以长列表 (long) 格式输出的结果。

$ cat input.txt
-rw-r--r-- 1 jarvis jarvis 200M Nov 27 22:04 file1.dat
-rw-r--r-- 1 jarvis jarvis 400M Nov 27 22:04 file2.dat
-rw-r--r-- 1 jarvis jarvis 500M Nov 27 22:04 file3.dat
-rw-r--r-- 1 jarvis jarvis 600M Nov 27 22:04 file4.dat
-rw-r--r-- 1 jarvis jarvis 700M Nov 27 22:04 file5.dat

我们可以使用 awk 命令显示特定列。让我们从文件中读取第五列。

$ awk '{print $5}' input.txt
200M
400M
500M
600M
700M

让我们看看我们在 awc 命令中使用的选项:

  • print - 它是 awk 的内置函数,用于将文本打印到标准输出流

  • $5 - 它表示第 5 列的文件大小

请注意,awk 使用 $N 来表示第 n 列。例如,$1 表示第 1 行

您还可以使用 cut 命令显示特定列。让我们通过剪切前两行来打印同一列。

$ cut -d' ' -f5 input.txt
200M
400M
500M
600M
700M

我们将快速了解一下我们在从文本文件中剪切单词时使用的选项。

  • -d - 它表示字段分隔符。其默认值为制表符

  • -f5 - 它表示第 5 列的文件大小

显示多列

我们也可以使用 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”命令重新排序列。输入按其呈现的相同顺序选择。

显示列的范围

有时在显示大量列时编写循环可能很方便。让我们打印从第 3 列到第 8 行的所有行。

$ awk '{ for (i = 3; i <= 8; ++i) printf $i" "; print ""}' input.txt
jarvis jarvis 200M Nov 27 22:04
jarvis jarvis 400M Nov 27 22:04
jarvis jarvis 500M Nov 27 22:04
jarvis jarvis 600M Nov 27 22:04
jarvis jarvis 700M Nov 27 22:04

我们现在将检查我们一直在 awk 命令中使用的选项。

  • for - 它是 awk 的循环结构

  • printf - 它是 awk 的内置函数,用于将格式化的文本打印到标准输出流

您可以使用 cut 命令获得相同的效果。您可以使用连字符表示每列值的范围。例如,如果您想选择其中一列的值介于 1 和

$ cut -d' ' -f3-8 input.txt
jarvis jarvis 200M Nov 27 22:04
jarvis jarvis 400M Nov 27 22:04
jarvis jarvis 500M Nov 27 22:04
jarvis jarvis 600M Nov 27 22:04
jarvis jarvis 700M Nov 27 22:04

更改 awk 的字段分隔符

默认情况下,awk 使用单个空格字符作为列分隔符。我们可以根据需要更改它。让我们首先修改原始输入文件,以便我们将任何空格字符替换为逗号字符。现在,输入文本的修改版本如下所示:

$ cat input.txt
-rw-r--r--,1,jarvis,jarvis,200M,Nov 27 22:04,file1.dat
-rw-r--r--,1,jarvis,jarvis,400M,Nov 27 22:04,file2.dat
-rw-r--r--,1,jarvis,jarvis,500M,Nov 27 22:04,file3.dat
-rw-r--r--,1,jarvis,jarvis,600M,Nov 27 22:04,file4.dat
-rw-r--r--,1,jarvis,jarvis,700M,Nov 27 22:04,file5.dat

让我们使用逗号作为列分隔符打印文件名、其大小和时间戳。

$ awk -F"," '{print $7 " " $5 " " $6}' input.txt
file1.dat 200M Nov 27 22:04
file2.dat 400M Nov 27 22:04
file3.dat 500M Nov 27 22:04
file4.dat 600M Nov 27 22:04
file5.dat 700M Nov 27 22:04

让我们看看我们在 awc 命令中使用的选项:

  • -F - 它表示字段分隔符

请注意,在第六列中,字段之间没有逗号。这演示了字段分隔符的使用。

结论

我们查看了几种从文本文档中显示特定列的不同方法。在使用 Linux 系统时,这些命令可以用于日常情况。

更新于: 2022-12-26

5K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告