単一の列を3つの列に変更するには?

単一の列を3つの列に変更するには?

単一列のデータを3列に配布するには?

入力する:

A
B
C
A
B
C
.
.
.

私は次の結果が欲しい:

A B C
A B C
A B C
.
.
.

答え1

入力データが質問に書き込まれたファイルとまったく同じ場合は、次のように使用fileできます。paste

$ paste - - - <file
A       B       C
A       B       C
.       .       .

出力にはフィールド区切り文字としてタブ文字がありますが、-d次のオプションを使用して変更できます。

$ paste -d ' ' - - - <file
A B C
A B C
. . .

paste3 つのダッシュは、入力で一度に 1 行ずつ入力される出力の列に対応します。

システムを確認してくださいman paste

答え2

そしてxargs

$ xargs -n3 < file
A B C
A B C
. . .

各コマンドラインは最大3つのパラメータを出力します。実行するコマンドを省略しました。echo不足している場合、デフォルトではこのコマンドが使用されます。それは同じです

xargs -n3 echo < file

答え3

非常に「ゴルフ」形式では、次の(GNU)awkコマンドを使用できます。

awk '{cache=(n%3) ? cache" "$0 : $0; n++; if (n % 3 == 0) {print cache; cache="";}}' inputfile.txt

より読みやすい形で:

awk '{if (n%3==0) cache=$0; else cache=cache" "$0; n++; if (n%3==0) {print cache; cache="";}}' inputfile.txt

プログラムawkは、内部行カウンタn(暗黙的にゼロに初期化される、重要)とcache3行の内容を" "空白()で区切って累積し、3行ごとにキャッシュを「フラッシュ」する内部キャッシュ変数を使用します。

3異なる数の行と「行トークン区切り記号」が必要な" "位置を置き換えることで、必要に応じて調整できます。cache=cache" "$0

関連情報