linux awk打印到文件正在追加而不是删除

twh00eeo  于 2023-11-17  发布在  Linux
关注(0)|答案(1)|浏览(112)

我有一个awk脚本,我需要将命令的输出写入文件。它应该是文件中的值,所以只有一个值。但它正在追加,给我1000个读数而不是1。我被难倒了。

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

  print MIN2 > "lastValue.txt"
}

字符串
要明确的是:该脚本,否则工作完美.我只需要它覆盖,不APPEND.和我的眼睛,这就是>做.如果我有>>我会期望它追加,所以我迷失了为什么>是做什么>>应该做.

vybvopom

vybvopom1#

您正在考虑>在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 [re-]在每次循环迭代中打开输出文件,它与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"

相关问题