1. 概要

Linuxユーザーとして、私たちはファイルに対してさまざまな操作を実行することがよくあります。 より一般的な操作の1つは、区切り文字の変換です。 たとえば、タブ区切りファイルをコンマ区切り値(CSV)に変換して、その形式を必要とするアプリケーションで使用したい場合があります。

このチュートリアルでは、bashを使用してこれを実現するさまざまな方法を見ていきます。

2. 例の設定

タブを含むサンプルファイルinput.txtを作成しましょう。

str1   str2
str3       str4
str5               str6
str7           str8

次に、このファイルに適切なコンテンツが含まれていることを確認しましょう。

$ cat --show-tabs input.txt
str1^Istr2
str3^I^Istr4
str5^I^I^I^Istr6
str7^I^I^Istr8

上記の例では、 catコマンドの–show-tabsオプションを使用しています。 このオプションは、TAB文字を^Iとして表示します。

3. trコマンドの使用

文字を翻訳または削除する場合は、trを使用してファイルを操作できます。 これを使用して、TAB文字をコンマに変換してみましょう。

$ cat input.txt | tr -s "\\t" "," > output.txt

この例では、 -sは、複数のTAB文字を単一のコンマに置き換えるために使用したsqueeze-repeats操作を表します。

結果を確認しましょう:

$ cat output.txt
str1,str2
str3,str4
str5,str6
str7,str8

ファイルには複数のタブ区切り文字が含まれていますが、trはそれぞれの場合にそれらを単一のコンマに変換していることに注意してください。

4. awkコマンドの使用

awk コマンドは、AWKプログラミング言語のインタープリターです。 簡潔なコードを使用して複雑なテキスト処理を実行できます。 その文字列操作関数を使用して、目的の結果を得ることができます。

$ awk '{ gsub(/[\t]/,","); print }' input.txt > output.txt
$ cat output.txt 
str1,str2
str3,,str4
str5,,,,str6
str7,,,str8

上記の例では、gsub関数で正規表現を使用しました。 これにより、各タブが個別のコンマに変換されました。 必要に応じて、式 gsub(/ [\ t] + /、”、”);を使用して複数のTAB文字を置き換えることができます。

5. sedコマンドの使用

sed は、テキストをフィルタリングおよび変換するためのストリームエディタです。 これにより、非対話型の方法でテキスト処理を実行できます。 その代替コマンドを使用して、TABをコンマに変換できます。

$ sed 's/\t\+/,/g' input.txt > output.txt
$ cat output.txt 
str1,str2
str3,str4
str5,str6
str7,str8

この例では、sedコマンドで正規表現を使用しました。 ここでは、 \ t \+正規表現を使用して複数のタブを置き換えることを選択しました。

6. 結論

この記事では、タブ区切りファイルをCSVに変換する一般的な方法のいくつかについて説明しました。

まず、trコマンドを使用しました。 次に、sedawkを正規表現で使用する方法を説明しました。 また、すべての TAB 文字を単一のコンマに変換するかどうか、または空白の列を保持して各TAB文字を個別に変換するかどうかも調べました。