我有一个awk脚本,需要将命令的输出写入文件.它should将覆盖文件中的值,因此有only个值.但它是附加的,给了我only0个读数,而不是只有1个.我被难住了.

for (i = 0; i < 1000; i++) {
  getline < COMMAND
  MIN2 = $1
  close(COMMAND)

  print MIN2 > "lastValue.txt"
}

要明确的是: playbook 在其他方面都很完美. 我只需要它覆盖,而不是附加. 在我看来,这就是>强的作用 如果我有>>,我会期望它追加,所以我不知道为什么>正在做>>应该做的事情.

推荐答案

您正在考虑shell中>的语义,awk不是shell,因此,除此之外,>在awk中的含义与在shell中的含义不同.

awk脚本如下:

for (i=1; i<=5; i++) {
    print i > "file"
}

与shell 脚本的语义不同,例如:

a)

for (( i=1; i<=5; i++ )); do
    echo "$i" > file
done

当shell 在每次循环迭代中[重新]打开输出文件时,它与如下所示的shell 脚本相同:

b)

for (( i=1; i<=5; i++ )); do
    echo "$i"
done > file

其中,当循环开始时,shell 只打开输出文件一次.

如果您想让awk脚本执行上面的shell 脚本"a)"所做的事情,那么它应该是:

for (i=1; i<=5; i++) {
    print i > "file"
    close("file")
}

对于您的代码,这将是:

for (i = 0; i < 1000; i++) {
  getline < COMMAND
  MIN2 = $1
  close(COMMAND)

  print MIN2 > "lastValue.txt"
  close("lastValue.txt")
}

但我想不出为什么要向一个文件写入1000次,然后丢弃前999行,而不是在完成后只写入一次:

for (i = 0; i < 1000; i++) {
  getline < COMMAND
  MIN2 = $1
  close(COMMAND)
}
print MIN2 > "lastValue.txt"

Linux相关问答推荐

在linux中,我想将昨天的文件与今天的文件进行比较,仅将今天的更改作为输出,忽略一些字段

使用 ansible 验证 firewalld 配置

在 cURL 中使用的确切位置将字节分成一些范围部分

如何更改文件的上次访问/修改/更改日期?

编译过度对齐的动态分配变量时出现 icpc 错误

对一个命令使用不同的 PHP 版本 CLI 可执行文件

如何指定链接时使用的库版本?

Linux 进程在后台 - 在作业(job)中 Stopped停止?

使用 rc.local 运行脚本:脚本有效,但在启动时无效

crontab 命令单独一行

nvm:无法卸载当前活动的 node 版本

如何分析内存使用情况?

如何知道是否有足够的内存可以在 Linux 机器上部署新应用程序?

os.walk 没有隐藏文件夹

ngrok 如何在防火墙后工作?

Linux:处理成服务

conda 命令会提示错误:Bad Interpreter: No such file or directory

Linux 守护进程

在linux中根据内容拆分文件

如何始终以 GB 为单位获取 df linux 命令输出