ファイル内の一定の間隔の行をマージする方法は?

ファイル内の一定の間隔の行をマージする方法は?

内容は次のようなファイルがあります。

a1
b1
c1
aa
bb
cc
aaa
bbb
ccc
d1
e1
f1
dd
ee
ff
ddd
eee
fff
g1
h1
i1
gg
hh
ii
ggg
hhh
iii

固定間隔(この場合は3)で行をマージし、次の結果を得るための最良の方法は何ですか?

a1 aa aaa
b1 bb bbb
c1 cc ccc
d1 dd ddd
e1 ee eee
f1 ff fff
g1 gg ggg
h1 hh hhh
i1 ii iii

入力から出力を取得するアルゴリズムは次のとおりです。

  • まず行1、つまりa1を取得します。
  • 私たちはギャップが3であることを知っています。
  • したがって、1行、1+3行、1+3+3行は同じ行になければなりません。
  • 同様に、行2、5、8も同じ行になければなりません。

それらa1ああそしてあああなどは任意のダミーテキストであり、任意の文字列にすることができます。ポイントは、2つの間に一定の間隔があることです。a1ああそしてあああ

現在、私はこれを行うためにemacsキーボードマクロを使用しています。それでもこの問題を解決するより良い方法があるかどうかを知りたいです。よろしくお願いします。

ベストアンサー1

/anything にあり、gnu行数が 9 の倍数である場合は、次を実行できます。

split -l9 --filter='pr -3 -s" " -t' infile

これにより、入力は9つの行に分割され、各行はpr -3 -s" " -t'数値に従って列にリンクされます。線と長さには、およびprオプションを使用する必要があります。詳しくはページをご覧ください。-w-lman

おすすめ記事