ファイルのレコードまたはフィールド区切り文字を変更する方法

ファイルのレコードまたはフィールド区切り文字を変更する方法

ファイルのレコード区切り文字を変更するには?たとえば、レコード区切り文字を改行から空白に変更して、複数行を1つに連結します。別の例は、レコード区切り文字を空白から改行に変更して、空白から1行を複数行に分割することです。レコード区切り記号を制御する環境変数は何ですか? IRSとORS?

同様に、ファイルのフィールド区切り文字をどのように変更しますか?環境変数IFS OFSを使用できますかcat

答え1

レコードとフィールドの区切り記号の動作は次のとおりです。確認する、、などのプログラムawkは、環境変数を介して実行されることはほとんどありません。 .exeなどのcat汎用ユーティリティには、これらの機能はありませんcut

awk言及されているものの中で最も柔軟で、レコード区切り文字とフィールド区切り文字の変数を設定できます。

FS
入力フィールドの区分正規表現A。<space>基本的に。
OFS
print 文はフィールド区切り文字を出力します。<space>基本的に。
ORS
print 文はレコード区切り記号 A を出力します。<newline>基本的に。
RS
文字列値の最初の文字はRS入力レコード区切り文字でなければなりません。<newline>基本的に。RS複数の文字が含まれる場合、結果は指定されません。空の場合、RSレコードは次のシーケンスで区切られます。<newline>1 つ以上の空行 (先頭または末尾の空行) を追加した場合、入力の先頭または末尾に空のレコードを作成しないでください。<newline>値に関係なく、FS常にフィールド区切り文字でなければなりません。

スクリプトでこれらの変数を設定できます。例えば、

awk ' BEGIN { RS=" "; } { print; }' < inputfile

ファイル内の各単語を新しい行に印刷します。-v次のオプションを使用してすべての変数に割り当てることもできます。

awk -v  RS=" " '{ print; }' < inputfile

最後に、変数(入力フィールド区切り文字)と同じオプションがawkあります。-FFS

追加資料:

答え2

tr文字の交換に興味がある場合は、このユーティリティ(「翻訳」を意味します)を確認してください。たとえば、改行を空白に変換するには、次のようにします。

tr '\n' ' ' < your_input_file

同様に、スペースを改行に変換するには、次のようにします。

tr ' ' '\n' < your_input_file

trで読むので、この例で行ったように、入力リダイレクト()を使用するか、入力をここにパイプする必要がありますstdin<|

関連情報