単一列のデータを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
. . .
paste
3 つのダッシュは、入力で一度に 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
(暗黙的にゼロに初期化される、重要)とcache
3行の内容を" "
空白()で区切って累積し、3行ごとにキャッシュを「フラッシュ」する内部キャッシュ変数を使用します。
3
異なる数の行と「行トークン区切り記号」が必要な" "
位置を置き換えることで、必要に応じて調整できます。cache=cache" "$0