如何在 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+ 閱讀量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告