回答:
Perl:
perl -ne 'for$i(0..3){print}' file
そして、@ derobert がコメントとして投稿したこの1つを追加する必要があります。
perl -ne 'print "$_" x4'
awk
およびバリアント:
awk '{for(i=0;i<4;i++)print}' file
bash
while read line; do for i in {1..4}; do echo "$line"; done; done < file
perl -ne 'print(($_)x4)'
。また、$line
bashバージョンで(エコーで)引用する必要があります。
BEGIN { ORS="\r\n" }
これがゴルフの試合になっているのだろうか:
sed 'p;p;p'
awk '1;1;1;1'
perl -lpE 'say;say;say' # if Paul McCartney and Michael Jackson were hackers...
説明:
sedのp
コマンドは、現在の行を印刷することです。デフォルトの動作では、次の行に移動する直前に現在の行を印刷します(そのため、sed -n
でオフにできるようにする必要があります)。いくつかの古いsedにはセミコロンが付いていないので(私は思う)、そうする必要があるかもしれませんsed -e p -e p -e p
Awkはcondition {action}
ペアで機能します。アクションが省略された場合、デフォルトでは、条件がtrueを返す場合、現在の行が印刷されます。多くのCライクな言語と同様に、Awk 1
はtrueとして扱います。(完全を期すために、条件が省略された場合、アクションは各レコードに対して実行されます。)
多くの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 $_;
}
1
awkで何をするのか。省略形print $0
?
1
(true)です。デフォルトのブロックはと同等{print}
です。したがって、このステートメント1
は、現在の行バッファー({print}
)を印刷することを意味します。({print}
そして{print $0}
QED、ほとんど同じである。)
sed
コマンドターミネータとしてセミコロンをサポートしていないを聞いたことはありません。本当にそんなことがありますか?
あなたは必要とせず、これを行うことができsed
、perl
またはawk
。
$ for i in `cat <file>` ; do seq <#> <#> | xargs -i -- echo $i ; done
または、whileループを使用します。
$ while read i ; do seq <#> <#> | xargs -i -- echo $i ; done < <file>
$ for i in `cat sample.txt` ; do seq 1 3 | xargs -i -- echo $i ; done
a
a
a
b
b
b
c
c
c
whileループ
$ while read i; do seq 1 2| xargs -i -- echo $i;done < sample.txt
a
a
b
b
c
c
純粋なシェルの使用:
repeats=4
while read line; do yes $line|head --lines=$repeats; done < infile > outfile
--help
オプションではなく文字列とみなす方法を知っていますか?[ line
is --help
または別のオプションの場合を考慮]
yes -- --help
yes
、head
これは「純粋なシェル」ではないことを意味します
awk
「Sfor
の繰り返しに一つだけのコマンドがある場合は、中括弧を必要としません。また、loop:perl
を使用する方が簡単です。foreach
for$i(0..3){print}