1. 概要

Linuxユーザーとして、私たちはファイルに対してさまざまな操作を頻繁に実行します。 たとえば、一般的な操作の1つは、ファイルの特定の列を表示することです。

このチュートリアルでは、これを実現するためのさまざまな方法について説明します。

2. 単一列を表示

例として使用するファイルを作成してみましょう。 input.txt ファイルには、lsコマンドの出力が長いリスト形式で含まれています。

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

awk コマンドを使用して、特定の列を表示できます。 ファイルから5番目の列を出力してみましょう。

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

awkコマンドで使用したオプションを見てみましょう。

  • print:これはawkの組み込み関数でテキストを標準の出力ストリームに出力します
  • $ 5: 5th列のファイルサイズを表します

awk$Nを使用してN番目の列を表すことに注意してください。 たとえば、$2は2nd列を表します。

cutコマンドを使用して特定の列を表示することもできます。 cutコマンドを使用して同じ列を印刷してみましょう。

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

cutコマンドで使用したオプションを見てみましょう。

  • -d:フィールド区切り文字を表します。 デフォルト値はtab文字です
  • f5 5th列のファイルサイズを表します

3. 複数の列を表示する

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コマンドで列の順序を並べ替えることはできないことに注意してください。 選択された入力は、読み取られるのと同じ順序で書き込まれます。

4. 列の表示範囲

表示する列が多い場合は、ループを使用すると便利な場合があります。 3から8の範囲内のすべての列を印刷してみましょう。

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

awkコマンドで使用したオプションを見てみましょう。

  • for:これはawkのループ構造です。
  • printf:フォーマットされたテキストを標準の出力ストリームに出力するawkの組み込み関数です

cut コマンドを使用して、同じ結果を得ることができます。 次のように、ハイフン文字を使用して列の範囲を指定できます。

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

5. awkのフィールドセパレーターの変更

デフォルトでは、awkスペース文字を列区切り文字として使用します。 ただし、要件に応じて変更できます。 まず、スペースをコンマに置き換えて、元の入力ファイルを変更しましょう。 変更されたファイルは次のようになります。

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

カンマを列区切り文字として使用して、ファイル名、そのサイズ、およびタイムスタンプを出力してみましょう。

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

awkコマンドで使用したオプションを見てみましょう。

  • -F:フィールドセパレーターを表します

6th 列では、フィールド区切り文字の使用を示すために、スペースが意図的にコンマに置き換えられていないことに注意してください。

6. 結論

このチュートリアルでは、ファイルから特定の列を表示するためのさまざまな例について説明しました。 このチュートリアルで示されているコマンドは、Linuxシステムでの作業中に日常生活で使用できます。