IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

awk レコード区切りの指定

どうも、nippaです。

テキスト処理で手っ取り早く処理するために、awk第2弾のレコード区切りの扱いについてです。

環境

OS: MacOSX 10.14 (Mojava)
awk version 20070501

1. レコード区切りとは?

レコード区切りは、いわゆる「行」を示しています。通常は改行コードで、レコード区切りを行っていますが、 これを別の文字・文字列を指定して、レコードを区切ることができます。

2. 文字を指定してレコードを区切る

レコード区切りの文字は、-v RS="[レコード区切り文字]"のオプションで指定することができます。

# レコード区切り(b)
echo "abababab" | awk -v RS="b" '{print $0}'
# 結果
a
a
a
a

bがレコード区切りの文字として認識されているます。 また、次のような書き方もできます。

echo "abababab" | awk 'BEGIN{RS="b"}{print $0}'

3. 改行コードの変更

awkを使って改行コードを変更することもできます。

echo "abababab" | awk -v RS="\n" -v ORS="\r\n" '{print $0}'
# または、
echo "abababab" | awk 'BEGIN{RS="\n" ; ORS="\r\n"}{print $0}'
echo "abababab" | awk -v RS="\r\n" -v ORS="\n" '{print $0}'
# または、
echo "abababab" | awk 'BEGIN{RS="\r\n" ; ORS="\n"}{print $0}'

4. 余談(Perlでの改行コード変換)

Perlでの改行コード変換をついでにまとめておきます。

perl -pe 's/\n/\r\n/g' infile > outfile
perl -pe 's/\r\n/\n/g' infile > outfile

感想

awkLinuxunixのベースパッケージに入っているので、大抵の環境で使うことができるコマンドです。

これを知っているか知らないかで、作業のスピードが大きく変わりそうですね!

ではでは、また次回。