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

linuxopen sourceoperating system更新于 2026/1/27 16:22:17

概述

我们经常在 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.txt200M400M500M600M700M

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

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

  • $5 − 它表示从第 5 列开始的文件大小

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

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

$ cut -d' ' -f5 input.txt200M400M500M600M700M

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

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

  • −f5 − 表示从第 5 列开始的文件大小

显示多列

我们也可以使用 awks 显示多行。让我们打印文件名及其长度 −

$ 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.txt200M file1.dat400M file2.dat500M file3.dat600M file4.dat700M file5.dat

您无法使用"剪切"命令对列进行重新排序。输入的选择顺序与它们显示的顺序相同。

显示列的范围

显示大量列时,编写循环有时可能很方便。让我们打印从第 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 和 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 系统的日常情况下使用。


相关文章


有用资源