よっしー
こんにちは。よっしーです(^^)
今日は、AWKで特定の列までを出力する方法についてご紹介します。
背景
AWKで特定の列までを出力する機会があったので、そのときの内容を備忘としてのこしました。
対象となるデータの例
下記のようなデータが存在しているとします。
id,uuid,value,created_at,updated_at
1,2D04153F-02B9-4E4B-9327-03B3B196CBD6,840,2023-11-26 15:35:40,2023-11-27 15:35:40
2,717058B8-2866-42C6-ACB5-D5BB359A26D2,394,2023-11-26 15:35:40,2023-11-28 15:35:40
3,0BC6EB72-41A5-4C2D-9937-E93F5BC5DCE9,783,2023-11-26 15:35:40,2023-11-29 15:35:40
4,E1180810-3173-4363-8785-8F29F0FF33F4,798,2023-11-26 15:35:40,2023-11-30 15:35:40
5,1B60B180-8C11-4191-BDCE-375256E70014,911,2023-11-26 15:35:40,2023-12-01 15:35:40
6,B5A0F2C8-860A-4E65-BE66-D77D93B9559B,197,2023-11-26 15:35:40,2023-12-02 15:35:40
7,CCE8BFA2-3AFC-412E-A54C-A91350BCB921,335,2023-11-26 15:35:40,2023-12-03 15:35:40
8,E246EB4E-929A-428E-92EE-DD1CA9F1680C,768,2023-11-26 15:35:40,2023-12-04 15:35:40
9,0CCE0B4D-DE2F-456F-9EC8-154188E7D5C1,277,2023-11-26 15:35:40,2023-12-05 15:35:40
10,C50D3565-D727-4E90-A33F-DA59E8FEBC58,553,2023-11-26 15:35:40,2023-12-06 15:35:40
特定の列までを出力
下記のコマンドを実施します。
awk -F, '{OFS=","}{NF=NF-2}{print}' test.csv
下記のような出力になっていれば成功です。
% awk -F, '{OFS=","}{NF=NF-2}{print}' test.csv
id,uuid,value
1,2D04153F-02B9-4E4B-9327-03B3B196CBD6,840
2,717058B8-2866-42C6-ACB5-D5BB359A26D2,394
3,0BC6EB72-41A5-4C2D-9937-E93F5BC5DCE9,783
4,E1180810-3173-4363-8785-8F29F0FF33F4,798
5,1B60B180-8C11-4191-BDCE-375256E70014,911
6,B5A0F2C8-860A-4E65-BE66-D77D93B9559B,197
7,CCE8BFA2-3AFC-412E-A54C-A91350BCB921,335
8,E246EB4E-929A-428E-92EE-DD1CA9F1680C,768
9,0CCE0B4D-DE2F-456F-9EC8-154188E7D5C1,277
10,C50D3565-D727-4E90-A33F-DA59E8FEBC58,553
解説
このawk
コマンドは、CSV形式のファイル (test.csv
) を処理して、各行から最後の2つのフィールドを削除し、結果を標準出力に出力するものです。以下にコマンドの各部分の解説をします。
awk -F, '{OFS=","}{NF=NF-2}{print}' test.csv
-F,
: フィールドの区切り文字をカンマに設定します。これはCSV形式のファイルで各列がカンマで区切られていることを意味します。'{OFS=","}'
:OFS
(Output Field Separator) をカンマに設定します。これにより、print
文でデフォルトの出力フィールドセパレータを使用する際に、出力される各フィールドの間にカンマが挿入されます。{NF=NF-2}
:NF
はフィールド数を表す特別な変数であり、このコマンドでは「Number of Fields」の略です。この行は、各行のフィールド数を2つ減らしています。つまり、各行の最後の2つのフィールドを削除しています。{print}
: 現在の行を標準出力に出力します。これにより、最後の2つのフィールドが削除された結果が表示されます。
簡潔に言えば、このawk
コマンドはCSVファイルの各行から最後の2つのフィールドを削除して、変更された行を標準出力に表示します。
おわりに
今日は、AWKで特定の列までを出力する方法についてご紹介します。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント