如何以有效的方式撰写以下内容:
for j in {1..339};do
for i in {1..427};do
echo -e $j'\t'$i >> ofile.txt
done
done
答案 0 :(得分:3)
这里有一个没有显式循环的替代方案
public void onPause() {
super.onPause();
tickHandler.removeCallbacksAndMessages(null);
}
答案 1 :(得分:2)
将重定向移动到外部循环,因此ofile.txt
仅打开一次。
for j in {1..339}; do
for i in {1..427}; do
echo -e "$j\t$i"
done
done >> ofile.txt
使用C风格的循环来防止那些花括号必须扩展可能更好,尽管我还没有对它进行分析。这是一种较少的优化。
for ((j = 1; j <= 339; ++j)); do
for ((i = 1; i <= 427; ++i)); do
echo -e "$j\t$i"
done
done >> ofile.txt
答案 2 :(得分:2)
Karakfa 的方法,没有 cut :
join -j9 -o 1.1,2.1 -t$'\t' <(seq 339) <(seq 427) > ofile.txt
基准测试,使用 bash 的内置时间命令,只是'真实'号码(在系统与系统之间有所不同,我的CPU约为4390 bogomips) :
外卖:加入提供100倍的加速。
答案 3 :(得分:2)
cat my.c
#include <stdio.h>
#include <stdlib.h>
main(n,s)int n; char **s;{
int i, j;
if(n!=3)exit(1);
for(i=1; i<=atoi(s[1]); i++)
for(j=1; j<=atoi(s[2]); j++)
printf("%4d %4d\n",i,j);
}
gcc my.c -o my
time ./my 339 427 >ofile.txt
real 0m0.035s
user 0m0.024s
sys 0m0.008s
cat karakfa_agc_solution
join -j9 -o 1.1,2.1 -t$'\t' <(seq 339) <(seq 427) > ofile.txt
time ./karakfa_agc_solution >ofile.txt
real 0m0.032s
user 0m0.012s
sys 0m0.008s
cat /proc/cpuinfo |grep bogo
bogomips : 6629.54
我也无法用C语言做更快的代码。
答案 4 :(得分:1)
perl -e '
for my $j (1..339) {
for my $i (1..427) {
print "$j\t$i\n";
}
}
' > ofile.txt
答案 5 :(得分:1)
awk 'BEGIN {
OFS="\t"
for (j=1;j<=339;j++) {
for (i=1;i<=427;i++) {
print j, i
}
}
}' > ofile.txt
答案 6 :(得分:1)
POSIX shell, seq :
#!/bin/dash
for j in `seq 339`;do
for i in `seq 427`;do
echo $j\\\t$i
done
done > ofile.txt
答案 7 :(得分:1)
使用fwrite()函数和ASCII代码表(参考@agc)可以快一点C代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define L 6 // max digit
main(n,s)int n; char **s;{
unsigned int i, j, k, m1, m2, mx;
char *p;
if(n!=3){printf("Usage %s num1 num2\n", s[0]); exit(__LINE__);}
m1=atoi(s[1]); m2=atoi(s[2]);
if(!(m1*m2)|| strlen(s[1])>L|| strlen(s[2])>L)exit(__LINE__);
mx=m1>m2?m1:m2; // max input num
// allocate and init ASCII code tbl for the bigest inp oper
if(!(p=(char *)malloc((mx+1)*(L+2))))exit(__LINE__);
if(!memset(p, ' ', (mx+1)*(L+2)))exit(__LINE__);
for(i=1; i<=mx; i++){
for(j=i,k=L-1; j; j/=10,k--)p[i*(L+2)+k]=j%10+'0';
p[i*(L+2)+L]='\t'; p[i*(L+2)+L+1]='\n';}
for(i=1; i<=m1; i++) //print variants from ASCII tbl
for(j=1; j<=m2; j++){
fwrite(p+(L+2)*i, L+1, 1,stdout);
fwrite(p+(L+2)*j, L+2, 1,stdout);}
}
gcc -o optf optf.c
time ./optf 339 427 >ofile.txt
real 0m0.010s
user 0m0.004s
sys 0m0.004s
bogomips :6629
architecture:AMD Phenom(tm) II X2 560