【Linux】制御文字を扱うためのコマンド

■ はじめに

業務で制御文字SOH(確かHiveのデフォルト区切り文字?)で
区切られたファイルを扱うことになった。
そのままだと扱いづらいので、そのことに関する完全自分用のメモ。

加工したファイルを最終的にSnowflake のステージ経由で表示したいのが目的。

Snowflake ~ 基本編 / ステージ ~
https://dk521123.hatenablog.com/entry/2022/09/01/220643

 => そんなことしなくても「RECORD_DELIMITER = '\x01'」でみれた???

https://docs.snowflake.com/ja/sql-reference/sql/create-stage#type-csv

目次

【0】SOH
【1】ファイル出力
【2】置換
【3】おまけ:文字列挿入

【0】SOH

* Start Of Heading(ヘッダ開始)

http://ash.jp/code/ctrltbl.htm

* コード:\x01

【1】ファイル出力

* echo -e で「\x01」を指定する

1)サンプル

echo -e "aa1\x01bb1\naa2\x01bb2\n" > test.txt

【2】置換

* sedコマンドを使う

sedコマンド
https://dk521123.hatenablog.com/entry/2019/11/23/101625
テキスト加工 ~ sed / awk
https://dk521123.hatenablog.com/entry/2019/11/22/223043
シェル ~ 文字列置換 ~
https://dk521123.hatenablog.com/entry/2023/10/25/000000

1)サンプル

# SOH to TAB
sed -i 's/\x01/\t/g' test.txt

別ファイルに出力

sed -e 's/\x01/\t/g' test.txt > output.txt

【3】おまけ:文字列挿入

* これも sedコマンドでできる

1)サンプル

# 1行目に「id」「name」をSOH区切りで挿入
sed -e "1i id\x01name" test.txt > output2.txt

参考文献
https://qiita.com/bamchoh/items/fc6e6b00606bdf81fd60

関連記事

sedコマンド
https://dk521123.hatenablog.com/entry/2019/11/23/101625
テキスト加工 ~ sed / awk
https://dk521123.hatenablog.com/entry/2019/11/22/223043
シェル ~ 文字列置換 ~
https://dk521123.hatenablog.com/entry/2023/10/25/000000
シェルでのファイルに関する処理あれこれ
https://dk521123.hatenablog.com/entry/2020/09/28/000000
ファイル内容を操作するコマンド
https://dk521123.hatenablog.com/entry/2023/07/26/000000
大きいファイルを扱う際のコマンド
https://dk521123.hatenablog.com/entry/2020/06/12/000000
ファイルの内容を表示するコマンド
https://dk521123.hatenablog.com/entry/2016/08/08/235934
Linux ~ パフォーマンスに関わるコマンド ~
https://dk521123.hatenablog.com/entry/2015/02/21/112554