どうも、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
感想
awkはLinux、unixのベースパッケージに入っているので、大抵の環境で使うことができるコマンドです。
これを知っているか知らないかで、作業のスピードが大きく変わりそうですね!
ではでは、また次回。