【问题标题】:How to show every result from awk rand() loop in separated files?如何在单独的文件中显示来自 awk rand() 循环的每个结果?
【发布时间】:2021-03-20 19:16:18
【问题描述】:

我正在尝试使用 awk 生成几个带有随机列的文件。然后将每两个粘贴到一个包含两列的文件中。这将是另一个程序的输入。我面临的问题是我只在一个文件中获得最后一次迭代。 我使用的代码是:

awk 'BEGIN {
srand();
total=5;
max1=10;
count=0;
    while(count < total) {
    rnd1 = int(rand() * max1);
    if ( array[rnd1] == 0 ) {
        count++;
        array[rnd1]++;
    }
}

for ( i=0; i<=200; i++) {
    if ( array[i] )
        print i;
}
}' > out1

awk 'BEGIN {
srand();
total=5;
max2=20;
count=0;
    while(count < total) {
    rnd2 = int(rand() * max2);
    if ( array[rnd2] == 0 ) {
        count++;
        array[rnd2]++;
    }

}

for ( j=0; j<=max2; j++) {
    if ( array[j] )
        print j;
}
}' > out2

paste out1 out2 | awk '{ print "  "$1".0" , $2".0"; }' > out3

有没有更好的方法将所有迭代放在单独的文件中?

我得到的输出是:

  1.0 2.0
  3.0 7.0
  4.0 9.0
  6.0 12.0
  9.0 13.0

这很好,但它在一个文件“out3”中,我想获取所有迭代文件“out(i)”文件。

【问题讨论】:

  • 欢迎来到 SO,很高兴你以代码的形式展示了你的努力,继续努力。请在您的问题中添加输入和预期输出示例,以便更好地理解您的问题。
  • 感谢您的评论,我没有输入,只是随机数。我编辑了这个问题,我在其中一个迭代中输出了一个输出。

标签: loops awk


【解决方案1】:

使用&gt; 重定向到文件将删除文件的内容。请改用&gt;&gt;,并关注docs 以获得更多帮助。

打印项目>>输出文件

此重定向将项目打印到预先存在的输出文件中 命名输出文件。 this和单-‘>’的区别 重定向是输出文件的旧内容(如果有)不是 抹去。而是将 awk 输出附加到文件中。如果 输出文件不存在,则创建它。

例如:

for ( i=0; i<=200; i++) {
    if ( array[i] )
        print i;
}
}' > out1

将在每次迭代中删除out1 的内容。只有最后一次迭代实际上会保存在out1 中而不会被覆盖。

【讨论】:

  • 感谢您的回复和链接。实际上,这会在文件中添加信息。问题是我想把它放到一个单独的文件中。谢谢
  • 你的标题非常明确:如何解决 this 问题。请不要在同一个帖子中提出多个问题。
  • 谢谢,我没有注意到标题不明确。修复它:)
猜你喜欢
  • 2017-12-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 2011-11-16
  • 2017-01-04
  • 2021-03-31
相关资源
最近更新 更多