ウェブサイト検索

AWKのトリムホワイトスペース


IT業界で働いていると、膨大なコード行や大量のデータを含む何千ものファイルに出くわすことがあります。そのデータ自体がファイルサイズに寄与する要因になることもありますが、ホワイトスペースもサイズを大きくする要因となります。ファイルサイズが大きくなると、これらのファイルを保存したり、同僚に転送したりする際に問題が発生することがあります。したがって、ファイルサイズをより適切に管理するためには、それらを削除することが重要ですが、その前にまず、詳細に理解するためにそれらを見ていきましょう。

ホワイトスペースとは何ですか?

ホワイトスペースとは、2つの印刷可能な文字の間のスペースのことです。それは、水平線の中にあるか、縦に線を分けることがあります。言い換えれば、単語の間のスペース、空白行、nbsp タグおよびタブは、すべてホワイトスペースと見なされることがあります。行の先頭や/または末尾の空白もホワイトスペースと見なされます。

データの整合性を保つために、プログラマーはデータを保存する際にこれらの空白を削除する責任のあるコードを書くことになります。次のような場合に空白が削除されることがあります:

  • ソースコードの再フォーマット/リファクタリング
  • データを整理する
  • コマンドラインの出力を簡素化する
  • ファイルサイズを減らす

ファイルに数行のデータがある場合、手動で空白を取り除くことは可能です。しかし、ファイルに何百行ものデータが含まれていると、手動でそれらを取り除くことは非常に難しくなります。それを克服するために、私たちは利用可能な多くのコマンドラインツールを使用できます。例えば、sed、cut、tr、awkなどです。その中で、awkはより強力なコマンドです。さらに詳しく見てみましょう。

Awkとは何ですか?

Awkはデータ操作とレポート生成に使用される非常に強力なスクリプト言語です。awkコマンドは、3人の創設者であるAho、Weinberger、Kernighanの名前の頭文字の略です。Awkは、ユーザーが変数、文字列、数値関数、および算術演算子を定義し、その他多くのことの中で書式設定されたレポートを作成することを可能にします。

この記事では、ファイルから空白を取り除くためにawkコマンドを使用する方法を探ります。このガイドを読み終えた後、あなたは以下のことを知ることができるでしょう:

  • 任意のファイルのすべてのホワイトスペースをトリムする。
  • 前後の空白を削除してください。
  • すべての先頭の空白を削除します。
  • すべての末尾の空白を削除します。
  • 複数のスペースを1つのスペースに置き換えます。

この記事で示されたシナリオは、Ubuntu 22.04 Jammy Jellyfishシステムで実行されます。これらのコマンドは、他のディストリビューションでも実行可能です。

サンプルファイル

このガイドでは、“asd.txt”という名前のテキストファイルを使用します。サンプルファイルのプレースホルダー内容はこのようになります:

さあ、始めましょう。

ファイル内のすべての空白文字を表示する方法は?

ホワイトスペースをよりよく理解するために、まずファイル内のホワイトスペースをどのように特定できるかを見てみましょう。そのためには、catコマンドの出力をtrコマンドにパイプで渡す必要があります。

$cat asd.txt | tr “ ” “*” | tr “\t” “&”

このコマンドは、スペースをアスタリスクに置き換え、タブスペースを“& ” シンボルに置き換えます。このコマンドが実行されると、ファイル内のすべての空白を以下のように見ることができるようになります:

では、awkコマンドの使用法を探ってみましょう。

すべてのホワイトスペースをトリミングする

最初のシナリオでは、サンプルファイルからすべての空白を削除します。これを達成するために、catコマンドの出力をawkコマンドにパイプします。

$ cat asd.txt | awk '{ gsub(/ /,""); print }'

ここです :

  • gsubはグローバル置換を意味し、空白を置き換えるために使用されます。
  • 二重スラッシュ(/ /)は空白を表します。
  • 「」ダブルクォーテーションマークは文字列をトリムするために使用されます。

つまり、上記のコマンドを使用して、すべての空白(/ /)を何もないもので置き換えています(“ ”)。上記のコマンドの出力を見れば、すべての空白が削除されていることがわかります。

文書から先頭および末尾の空白を取り除く

前回の出力から、空白が削除され、タブや空行が残されていることがわかります。前の例で使用されたコマンドを更新し、タブとともに先頭と末尾の空白も処理するようにできます。:

$cat asd.txt | awk '{ gsub(/^[ \t]+|[ \t]+$/, ""); print }'

以前のコマンドの要素を使用することで、先頭と末尾の空白が削除されたことを確認できます。

$cat asd.txt | awk '{ sub(/^[ \t]+|[ \t]/, ""); print }' | tr " " "*" | tr "\t" "&"

これらのスペースをそれぞれ個別に削除するために使用できるコマンドは次のとおりです。

先頭のスペースのみを削除する

$cat asd.txt | awk '{ sub(/^[ \t]+/, ""); print }'

末尾のホワイトスペースのみを削除する

$cat asd.txt | awk '{ sub(/[ \t]+$/, ""); print }'

ボーナス:複数のスペースを1つのスペースに置き換える

複数のスペースを1つのスペースまたは何もないものに置き換えるには、次のようにawkコマンドを使用できます。

$cat asd.txt | awk '{ gsub(/[ ]+/,””); print }'

trコマンドを使用すると、ホワイトスペースが削除されたことがわかります。

結論

これらのデモを通じて、awkコマンドを使用してホワイトスペースをトリムするさまざまな方法を探りました。それらを取り除くことは、さまざまな理由で便利になる可能性があります。

使用中に問題が発生した場合は、下のコメント欄を利用してお気軽にお問い合わせください。喜んでお手伝いします。