如何在 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 系统时,这些命令可以用于日常情况。