awk
テキストを100回繰り返すには?
つまり
string1
string2
string3
になります:
string1
string2
string3
string1
string2
string3
string1
string2
string3...
答え1
この質問にはタグ付けされていますが、awk
以下を使用しない簡単な解決策を追加したいと思いますawk
。
seq 100 | xargs -n1 -I{} echo "1 2 3"
繰り返したいデータがファイルにある場合は、次を使用してください。
seq 100 | xargs -n1 -I{} cat filename
yes
別の解決策は、引数を繰り返すコマンドを使用することです。
yes "1 2 3" | head -n100
答え2
(input
繰り返すテキストを含むファイル)
GNUの使用awk
(そして入力にNULバイトが含まれていないと仮定):
awk -v n=100 -v RS='\0' -v ORS= '{while (n--) print}' < input
持ち運べる:
awk -v n=100 -v ORS= '
{all = all $0 RS}
END {while (n--) print all}' < input
(入力が改行文字で終わらない場合は改行文字が追加されます。)
次のこともできます。
set --
n=100; while [ "$n" -gt 0 ]; do
set -- "$@" input
n=$((n - 1))
done
cat "$@"
input
これは含まれているバイトに関係なく機能します。ただし、の値が大きく、シェルにコマンドが組み込まれていない場合は、n
コマンド引数のサイズに対するシステム制限(ここ)に達する可能性があります。cat
cat
または、最新バージョンを使用すると、zsh
固定テキストに対して次のことができます。bash
ksh93
yash -o braceexpand
printf '%.0sstring1\nstring2\nstring3\n' {1..100}
そしてzsh
:
repeat 100 print -l string{1..3}
明らかに言えば、seq
GNUがインストールされているシステムでは、次のようにすることもできます。
seq -f 'string1
string2
string%.0g' 3.0001 0.0001 3.0100
答え3
そしてawk
:
echo "t1 t2 t3" | awk '{l=$0; for(i=1;i++<100;) l=l" "$0} END{print l}'
そしてperl
:
echo "t1 t2 t3" | perl -ne 'chomp;print "$_ " x 100;'
答え4
では、/bin/bash
ファイルレコードの3つの値をn回連続して印刷できるように、印刷レコードをパラメータ化できます。連続する必要はありません。
入力ファイルからレコード2、3、6を印刷するとします。inputfile
$ cat inputfile
A
B
C
D
E
F
$ awk -v RS='\n' '{if(NR=="2"||NR=="3"||NR=="6") a[NR]=$0} \
END{for(i=1;i++<=100;) {print a[2]"\n"a[3]"\n"a[6];}}' inputfile
確かに、これは呼び出される配列のために少しコストがかかります。