如何在 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 系統時,這些命令可以用於日常情況。