The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

 $0 -a NUM [FILE]

  TSV形式にして、NUM列に満たない行があった場合に、余分な改行文字があったと見做して、
  その改行文字を適当な文字列に置き換えて、複数の列を1行にまとめる。
    さらに、NUM列を超える列があった場合は、-C 3 のような指定で、この場合は、3列に余分な列が
  まとまるようにして、全行が、NUM列になるように調整する。
     最後に2次情報として、標準エラー出力に、出力の何行目が変更されたかを表示する。
      (入力の何行目が変更されたかについては、未実装。)
  なお、空行が来た場合には、一旦それまでの出力処理を済ませて、空行を出力する。

オプション: (Nは正の整数である。REGEXは正規表現である。strは文字列である。)

  -a N : 各行が最低限持つべき列数を指定する。 
  -c str : 余分に発生した改行文字を置換する文字列を指定する。未指定なら "#n#" となる。
  -i str : 入力の列の区切り文字を指定する。未指定なら "\t" (タブ文字)となる。
  -1 REGEX : 入力に1列だけの行があって、正規表現REGEXにヒットすればその行はさらに次の行に連結。そうでないなら前の行に連結。

  [未実装→] -C N : もしも列の数が多すぎる場合(-aで指定した数よりも)、(1始まり)左からN行目に余分な列を吸収する[実験的]
  [未実装→] -C l : もしも列の数が多すぎる場合に、その行で、どこか連結して発生するフィールド文字列が最も長くなるようにする。
  [未実装→] -I str  : -C の指定がある場合に、列区切り文字を 文字列 str に置換する。未指定なら "#t#" になる。

  #-C N[,N].. : 

  --help : このヘルプを表示。

このコマンドの動作について:

 1. 入力を逐次1行ずつ読む。列数が足りなかったから、足りるまで読んで連結する。
 2. 丁度NUM列に達しても、その次の行が1個のみの列の場合 : 
          オプションの -1 REGEX (正規表現)の指定にその1個の列が一致しなければ、連結。
          それ以外なら、そのNUM列に達した行を出力して、新たにその1列の行の処理に進む。
 3. 以上が済んだら、入力が続く限り、1.に戻る。
 

ただし、オプション -Cの指定がある場合は、上記で作られた行に対して、NUM列を超える列を どこか途中で連結することで、列数を減らして、NUM列になるようにする。

  The command line `perldoc App::colalign' shows the English help of `colalign' command.

利用の仕方 : 元のファイルに対して、まず、どの文字列で、余分な改行文字を置換するか決める。 そして、その文字列が 処理対象となるファイルに対して grep を試して、無いことを確かめる。

 開発上のメモ: 
   * 10年くらい前から作ろうと思っていたが、ふと思い立って2023年8月に作成。