【Awkでデータ解析のすゝめ】CSVで重複なしのユニークなリストを作る/検索結果から重複を取り除くタコつぼの中でプログラミングをコツコツ楽しむ人のためのやや偏ったブログです。当ページには【広告/PR】を含む場合があります。CSVデータの行検索の結果から重複を取り除く久々のシェルスクリプトのお話回です。CSVの行を検索した結果に、要素の重複を含むケースが結構あります。この重複を含んだままのデータをそのまま気づかすに処理してしまうと、最終的に思わぬ計算結果を得てしまうなど、好ましくないこともあります。前に、CSVデータの中身から重複を「探す」と「カウントする」の2つのテクニックを取り上げたことがありました。【Awk&Sed活用講座】CSVファイルから重複データを見つける&重複をカウントするAwkとSedでCSVファイルからCSVデータの重複を取り扱うテクニックを簡単に載せます。今回はそのテクニックの応用編として、CSVデータから重複を削除してユニークな要素だけの行要素にすることと、検索結果に重複がある場合に、その重複を取り除くのテクニックの2つを紹介します。【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集CSVファイルの重複をなくし、ユニークな行データにする再集計などを必要としないCSVファイルがあれば、元データから重複項目をそのまま無くすことで、他のユーザーからも扱いやすくなります。以下のデータのように、株式銘柄をリストアップしたデータが並んでいて、そのいくつかの行が重複しています。1319,日経300F,東証1390,ETFアジア太平洋株,東証1391,ETFスイス株,東証1419,タマホーム,東証P1419,タマホーム,東証P1580,日経平均ベア,東証1674,ETFS白金,東証1770,藤田エンジ,東証S1826,佐田建,東証S1835,東鉄工,東証P1770,藤田エンジ,東証S2032,ハンセンベア,東証2109,三井糖,東証P2838,米国国債投信(ヘッジなし),東証2136,ヒップ,東証S2433,博報堂DY,東証P2032,ハンセンベア,東証2109,三井糖,東証P2648,ブルームバーグ米国債(為替ヘッジあり),東証2838,米国国債投信(ヘッジなし),東証2904,一正蒲鉾,東証P3063,ジェイグループ,東証G3261,グランディ,東証G3261,グランディ,東証G3329,東和フード,東証S3492,タカラレーペン,東証3865,北越コーポ,東証P3492,タカラレーペン,東証3063,ジェイグループ,東証G4428,リンク,東証G4031,チッカリン,東証S4428,リンク,東証G4544,HUグループ,東証P4832,JFEシス,東証S4928,ノエビアH,東証P5020,JXホール,東証P4544,HUグループ,東証P5194,相模ゴ,東証S5757,サンエツ,東証P4544,HUグループ,東証P6200,インソース,東証P6474,不二越,東証P6958,日本CMK,東証P7226,極東開発,東証P7559,ジーエフシー,東証S8093,極東貿易,東証P8801,三井不,東証P8093,極東貿易,東証P6200,インソース,東証P9240,デリバリーコンサル,東証G9533,邦ガス,東証P9735,セコム,東証P9533,邦ガス,東証P9984,ソフトバンク,東証Pこのようなデータは、未整理のままではデータとしての価値が低いので、まずは重複を取り除き、銘柄コード順にソートして、より解析しやすい状態にしたほうが後々使いやすくなるでしょう。先程のデータをローカルにCSVファイルとして、作業フォルダに保存してから、以下のコマンドを試してみましょう。','#👇出力結果1319,日経300F,東証1390,ETFアジア太平洋株,東証1391,ETFスイス株,東証1419,タマホーム,東証P1580,日経平均ベア,東証1674,ETFS白金,東証1770,藤田エンジ,東証S1826,佐田建,東証S1835,東鉄工,東証P2032,ハンセンベア,東証2109,三井糖,東証P2136,ヒップ,東証S2433,博報堂DY,東証P2648,ブルームバーグ米国債(為替ヘッジあり),東証2838,米国国債投信(ヘッジなし),東証2904,一正蒲鉾,東証P3063,ジェイグループ,東証G3261,グランディ,東証G3329,東和フード,東証S3492,タカラレーペン,東証3865,北越コーポ,東証P4031,チッカリン,東証S4428,リンク,東証G4544,HUグループ,東証P4832,JFEシス,東証S4928,ノエビアH,東証P5020,JXホール,東証P5194,相模ゴ,東証S5757,サンエツ,東証P6200,インソース,東証P6474,不二越,東証P6958,日本CMK,東証P7226,極東開発,東証P7559,ジーエフシー,東証S8093,極東貿易,東証P8801,三井不,東証P9240,デリバリーコンサル,東証G9533,邦ガス,東証P9735,セコム,東証P9984,ソフトバンク,東証P確かに簡単なAwkスクリプトで、重複した行もなく、ユニークなリストとして整理できました。この重複を弾くテクニックの中身の解説としては、前回詳しく説明していましたので、こちらの記事では省略させていただきます。【Awkでデータ解析のすゝめ】CSVデータで重複しているセル要素を見つける/カウントするcsvファイル内のデータが重複しているときの操作をAwkでどう見つける/処理するのかをじっくり考察していきます。【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集CSVデータの行検索の結果から重複を取り除く先ほどのように、CSVファイルのデータそのものの重複を取り除くのではなく、行検索から得られた結果のみに、重複を取り除く操作を行いたい場合に便利なテクニックです。以前の記事で、似たような「CSVの中身を検索するスクリプト」を作ったことがありました。【シェルスクリプト&Excel】条件を与えて検索結果をCSVデータで出力するスクリプト読み込んだCSVデータから特定の1列を検索キーでヒットした行要素を、CSV形式でピックアップして表示するシェルスクリプトを作成してみます。そちらの記事でから流用したシェルスクリプトを一部改良して、行要素を検索するツールに仕立て直して、検索キーとして銘柄コードの一部でコマンドオプションから与える使い方をやってみます。$1これで例えば、CSVデータから銘柄コードに44を含む行を重複なしに抽出できるか試してみましょう。444428,リンク,東証G4544,HUグループ,東証Pどうやらちゃんと検索結果から重複が消えて、見やすいリスト表示が可能となっているようです。!col[$1]++になります。最初の条件で、銘柄コードのある一列目にKEY値が含まれているかを正規表現からフィルタリングし、二番目の条件で、重複が発生した行を弾くようにしています。Awkなら、このような簡単なスクリプトの記述だけで、いとも簡単に重複なしのリストを得ることができるので、このテクニックを理解しておくと、色々と応用が効くと思います。CSV【Awk&Sed活用講座】CSVファイルから重複データを見つける&重複をカウントするシェルスクリプトからのCSVデータを利用するためのワンポイント講座です。今回はAwkとSedでCSVファイルからデータの重複を取り扱うテクニックを簡単に載せます。JSON-CSV変換Jq&AwkコマンドでJSONファイル⇔CSVファイルに相互変換する方法を考察jqコマンドとawkコマンドの2つをかけ合わせることで、JSONとCSVの柔軟な相互変換をどのように実現するか考察してみました。記事の担当:taconocatナンデモ系エンジニア主にAngularでフロントエンド開発することが多いです。開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。プログラミングするのが好きな人間です。