`awk`コマンドを使用して列の範囲を印刷する方法

How Print Range Columns Using Awk Command



`awk`コマンドは、Linuxの表形式データから一連の列を出力するために使用できる多くのコマンドの1つです。 `awk`コマンドは、` awk`スクリプトファイルを実行することで端末から直接使用できます。このチュートリアルでは、表形式のデータから一連の列を印刷する方法を示します。

例1:コマンド出力から列の範囲を出力する

次のコマンドは、コマンド出力から2番目、3番目、および4番目の列を出力します。 ‘ls -l ‘。ここでは、列番号が明示的に示されていますが、同じ範囲の列を印刷するためのより効率的なコマンドを次の例に示します。







$ls -NS | awk '{print $ 2、$ 3、$ 4}'

上記のコマンドにより、次の出力が生成されます。





例2:を使用して、ファイルから列の範囲を出力します。 にとって ループ

この例とこのチュートリアルの他の例に従うには、という名前のテキストファイルを作成します mark.txt 以下の内容で





ID CSE203 CSE102 CSE202
1109 78 87 79
1167 67 81 70
1190 56 61 69
1156 89 55 78
199 54 66 58

次の `awk`コマンドは、marks.txtの最初の3列を出力します。 NS にとって ループは列の値を出力するために使用され、ループには3つのステップが含まれます。 NS NF 変数は、ファイルのフィールドまたは列の総数を示します。

$mark.txt
$awk '{for(i = 1; i<=NF-1;i++) printf $i' '; print ''}'mark.txt

コマンドを実行すると、次の出力が生成されます。出力は学生を示しています ID とのマーク CSE203CSE102



例3:開始変数と終了変数を定義して列の範囲を出力します

次の `awk`コマンドは、コマンド出力「ls -l」の最初の3列を初期化することにより、出力します。 起動エンディング 変数。ここで、の値 起動 変数は1で、の値は エンディング 変数は3です。これらの変数は、列の値を出力するためにforループで繰り返されます。

$ls -NS | awk 'BEGIN {first = 1;最後= 3}
{for(i =最初; i

コマンドを実行すると、次の出力が表示されます。出力には、出力の最初の3つの列の値「ls-l」が表示されます。

例4:フォーマットを使用してファイルから列の範囲を印刷する

次の `awk`コマンドは、の最初の3列を出力します。 mark.txt を使用して printf および出力フィールドセパレータ( OFS )。ここで、forループには3つのステップが含まれ、ファイルから3つの列が順番に出力されます。 OFS ここでは、列の間にスペースを追加するために使用されます。ループ(i)のカウンター値が エンディング 変数の場合、改行( n)が生成されます。

$mark.txt
$awk -v 始める=1 -v 終わり=3 '{for(i = start; i<=end;i++) printf('%s%s',
$ i、(i == end)? ' n':OFS)} '
mark.txt

上記のコマンドを実行すると、次の出力が生成されます。

例5:条件ステートメントを使用してファイルから列の範囲を出力する

次の `awk`コマンドは、forループとifステートメントを使用して、ファイルの最初と最後の列を出力します。ここで、forループには4つのステップが含まれています。 NS 起動エンディング スクリプトでは変数を使用して、if条件を使用してファイルから2番目と3番目の列を省略します。 OFS変数は列の間にスペースを追加するために使用され、ORS変数は最後の列を出力した後に改行( n)を追加するために使用されます。

$mark.txt
$awk -v 始める=2 -v 終わり=3 '{for(i = 1; i<=NF;i++)
if(i> = start && i<=end) continue;
else printf( '%s%s'、$ i、(i!= NF)?OFS:ORS)} '
mark.txt

上記のコマンドを実行すると、次の出力が表示されます。出力には、marks.txtの最初と最後の列が表示されます。

例6:NF変数を使用してファイルから列の範囲を出力する

次の `awk`コマンドは、NF変数を使用して、ファイルの最初と最後の列を出力します。列の値を出力するためにループや条件ステートメントは使用されません。 NFはフィールドの数を示します。 mark.txtには4つの列があります。 $(NF-3)は最初の列を定義し、$ NFは最後の列を示します。

$mark.txt
$awk '{print $(NF-3)' '$ NF}'mark.txt

上記のコマンドを実行すると、次の出力が生成されます。出力には、marks.txtの最初と最後の列が表示されます。

例7:substr()およびindex()を使用してファイルから列の範囲を出力します

index()関数は、2番目の引数値が最初の引数値に存在する場合に位置を返します。 substr()関数は3つの引数を取ることができます。最初の引数は文字列値、2番目の引数は開始位置、3番目の引数は長さです。次のコマンドでは、substr()の3番目の引数が省略されています。列は `awk`コマンドの$ 1から始まるため、index()関数は$ 3を返し、コマンドは$ 3から$ 4まで出力します。

$mark.txt
$awk '{print substr($ 0、index($ 0、$ 3))}'mark.txt

上記のコマンドを実行すると、次の出力が生成されます。

例8:printfを使用してファイルから列の範囲を順次印刷する

次の `awk`コマンドは、10文字に十分なスペースを設定することにより、marks.txtの1列目、2列目、および3列目を出力します。

$mark.txt
$awk '// {printf'%10s%10s%10s n '、$ 1、$ 3、$ 2}'mark.txt

上記のコマンドを実行すると、次の出力が生成されます。

結論

コマンド出力またはファイルから列の範囲を出力するには、さまざまな方法があります。このチュートリアルでは、 `awk`コマンドがLinuxユーザーが表形式のデータからコンテンツを印刷するのにどのように役立つかを示します。