9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

固定長をカンマ区切りに変換する方法(bash)

Last updated at Posted at 2017-09-12

はじめに

昔覚えたはずが忘れて無駄な工数を使用してしまったので、
備忘録を兼ねて記事にしました。

なお、タイトルは固定長をカンマ区切りに変換する方法ですが、
同じ方法でタブ区切り等、好きな区切り文字を追加することができます。

前提

文字コード:ASCII
改行コード:LF
とする。

固定長をカンマ区切りに変換

例えばsample.csvのデータを

20170901130059XXX-XXXX-XXXX000000290
20170903130059XXX-XXXX-XXXX000000290

とする。上記を

20170901,130059,XXX-XXXX-XXXX,000000290
20170903,130059,XXX-XXXX-XXXX,000000290

としたい場合、下記コマンドで可能である。

cat sample.csv |gawk 'BEGIN{FIELDWIDTHS="8 6 13 9"}{print $1","$2","$3","$4}' >output.csv

結果をファイル出力したい場合は例のようにリダイレクトすればよい。

FIELDWIDTHSには半角スペース毎に区切りたい文字の「バイト数」を記載する。
上記例の場合は年月日(8バイト)、時分秒(6バイト)、電話番号(13バイト)、金額(9バイト)である。

printには$数字に区切りたい文字が順番に入り、「"」で囲っている場所に
好きな文字(今回だと「,」)を記載するとそれがデリミタ(区切り文字)となる。

例えば「,」を「\t」にすればカンマ区切りではなく、タブ区切りとなる。


cat sample.csv |gawk 'BEGIN{FIELDWIDTHS="8 6 13 9"}{print $1"\t"$2"\t"$3"\t"$4}' >output.csv

cat output.csv
20170901	130059	XXX-XXXX-XXXX	000000290
20170903	130059	XXX-XXXX-XXXX	000000290

固定長のファイルに対して、カンマ等のデリミタを設定すると、
見やすくなったり、加工に使いやすかったりするので便利です。

おわりに

今回は備忘録の意味合いが強いので特には無いですが……
今後別の文字コードや改行コードのファイルを編集することがある場合、
追記していこうと思います。

9
12
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?