前提・実現したいこと
OSX ターミナルにて、
全角文字・半角文字・半角スペースで構成された固定長テキストファイルを、指定のバイト数で区切ってcsvファイルにしたいです。
発生している問題・試したこと
入力データの文字コードを「UTF-8(LF)」にして
cat sample.csv | gawk 'BEGIN{FIELDWIDTHS="2 4 2 6 5 1 1 3 "}{print $1","$2","$3","$4”,……とすると、
全角文字を2バイトで読んでほしいところ1バイト換算になってしまい、
文字コードを「Shift_JIS (LF)」にしてから試したところ、文字ばけてしまいました。
また、cat sample.csv | sed -e ’s/^(.{2})(.{4})(.{2})(.{6})…/“\1”,”\2”,”\3”,”\……
としたら、日本語が出力から消え、スペース に謎の数値が入っていました。
追記
皆様 ご回答、ありがとうございます!
言葉足らずですいません。。
文字コードへのこだわりはありません。
バイト数が(配列の中身を考慮しており)固定で、半角文字は1バイト、全角文字は2バイトで抜き出してほしいです。加工元の固定長ファイルは、2行目以降もすべて同じバイト数で構成されています。
例えばFIELDWIDTHSが6の箇所にて、全角文字と半角スペースが混じっているため、
"あいう"という文字列の場合もあれば、("あいうえおか"で抜き出されてしまい、ここ以降がずれてしまう)
"あい "の場合もあれば、("あい うえ"が抜かれてしまう)
" "の場合もあります(" "の正しい形で抜かれる)
追記②
KojiDoi さん
早速のご回答、ありがとうございます!!
文字列が「あいう」なのにfieldwidthが5だったりする ケースが有りえる
全角文字が含まれる項目はすべて偶数になっています(全角文字を2バイトで扱わないといけない前提?)。ですので奇数の場合がありません。
回答1件
あなたの回答
tips
プレビュー