ファイルの各行が固定回数だけ繰り返されることを望みます。
たとえば、各行は4回繰り返されます。
a
b
c
になる:
a
a
a
a
b
b
b
b
c
c
c
c
いくつかの検索をしてみると、重複した行を単一の行にマージするなど、反対の操作に関連する多くの質問と回答があり、多分再印刷して行を2倍に増やすことに関する質問もありました。
Cではこれは簡単ですが、基本的なコマンドについてもっと知りたいので、常にこれらのワンタイムコマンドに頼る必要はありませんでした。
ベストアンサー1
これがこのように変わるかどうか疑問に思います。ゴルフマッチ:
sed 'p;p;p'
awk '1;1;1;1'
perl -lpE 'say;say;say' # if Paul McCartney and Michael Jackson were hackers...
説明する:
sedのコマンドp
は現在の行を印刷することです。デフォルトの動作は、次の行に移動する前に現在の行を印刷することです(これが-n
sedがそれをオフにするのを許可する理由です)。いくつかの古いsedにはセミコロンがなかったので(私の考えでは)、次のことを行う必要があるかもしれません。sed -e p -e p -e p
awkはペアで動作しますcondition {action}
。この操作を省略すると、デフォルトで条件が true を返すと、現在の行が印刷されます。 Awkは、多くのCシリーズ言語と同様に、これを1
事実として扱います。 (完全性のために条件を省略した場合は、レコードごとに演算を行います。)
多くのPerl関数は「デフォルト」変数を使用します。次のコード行は同じです(perl 5.16以降)。
$ perl -MO=Deparse -lpE 'say;say;say'
BEGIN { $/ = "\n"; $\ = "\n"; }
use feature 'current_sub', 'evalbytes', 'fc', 'say', 'state', 'switch', 'unicode_strings', 'unicode_eval';
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
say $_;
say $_;
say $_;
}
continue {
die "-p destination: $!\n" unless print $_;
}