「1 2 6 9 18 19 25 67 89 102 140 187」のような長い文字列があり、数字の代わりに指定された数の入力または空白(たとえば、3番目の入力から折りたたみ)の後に折りたたみたいです。それ、いろいろ。
答え1
最も簡単な答えはおそらく次のとおりです。
echo "1 2 6 9 18 19 25 67 89 102 140 187 99 12" | xargs -n 3
答え2
これは、単語(スペースで区切られた文字列など)から標準入力を縮小するPerlスクリプトです。コマンドラインで「単語数」を指定できます。
たとえば、fold-words.plとして保存して実行可能にします。chmod +x fold-words.pl
#! /usr/bin/perl
use strict;
my $max = shift ;
while (<>) {
my $count = 0;
foreach my $word (split) {
print "$word " ;
$count++ ;
print "\n" if ($count % $max == 0)
}
print "\n" if ($count % $max != 0);
$count=0;
}
出力例:
$ echo "1 2 6 9 18 19 25 67 89 102 140 187 99 12" | ./fold-words.pl 3
1 2 6
9 18 19
25 67 89
102 140 187
99 12
(split)
任意の正規表現を使用するように変更すると、「単語」のより厳密な(さらに奇妙な)定義を持つことができます。たとえば、(split /\t/)
デフォルトの「1つ以上の空白文字」ではなく、単一のタブでのみ分割されます。
答え3
これは単純なawkバージョンです。%3
1行あたりのフィールド数を変えるには、3を変更してください。
awk '{ for(i=1; i<NF; i++) { printf $i OFS; if (i%3 == 0) { print "" }} printf $i}'
実行例:
$ str="one two three four five"
$ echo $str | awk '{ for(i=1; i<NF; i++) { printf $i OFS; if (i%3 == 0) { print "" }} printf $i}'
one two three
four five