Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用awk getline清空文件_Linux_Shell_Scripting_Awk_Getline - Fatal编程技术网

Linux 如何使用awk getline清空文件

Linux 如何使用awk getline清空文件,linux,shell,scripting,awk,getline,Linux,Shell,Scripting,Awk,Getline,如何使用getline删除文件的内容。应在每第9个循环中刷新文件,并在最后一个第9个循环之前刷新旧内容,然后应将其删除,以便可以再次写入和检索新内容 脚本函数: 这是一个删除文件内容的函数。该函数每9次循环调用一次。从逻辑上讲,从这个意义上讲这是可以的,但是删除内容是不起作用的,我想,用getline删除文件的内容不是正确的方法,对吗 然后如何一次或在循环中删除文件的内容 据我所知,您不能仅使用awk清空文件,除非您解析每一行并删除它,因为awk逐行读取文件 我不知道您想要实现什么,但对我来说,

如何使用getline删除文件的内容。应在每第9个循环中刷新文件,并在最后一个第9个循环之前刷新旧内容,然后应将其删除,以便可以再次写入和检索新内容

脚本函数:

这是一个删除文件内容的函数。该函数每9次循环调用一次。从逻辑上讲,从这个意义上讲这是可以的,但是删除内容是不起作用的,我想,用getline删除文件的内容不是正确的方法,对吗


然后如何一次或在循环中删除文件的内容

据我所知,您不能仅使用awk清空文件,除非您解析每一行并删除它,因为awk逐行读取文件


我不知道您想要实现什么,但对我来说,最好的方法是创建一个bash脚本,其中有一个函数运行您的awk脚本,另一个函数使用sed清空文件,并在该文件上调用任意次数。

据我所知,您不能仅使用awk清空文件,除非您解析每一行并删除它,因为awk逐行读取文件


我不知道您想要实现什么,但对我来说,最好的方法是创建一个bash脚本,其中有一个函数运行您的awk脚本,另一个函数使用sed清空文件,并在该文件上调用任意次数。

如果您的shell是bash,您确实希望在awk中清空文件:请参阅下面的测试:

kent:/tmp$ seq 3 > a.txt
kent:/tmp$ cat a.txt
1
2
3
kent:/tmp$ awk '{system(">a.txt")}'<<<"foo"
kent:/tmp$ cat a.txt
kent:/tmp$ 

如您所见,您希望awk printf>fn}中的最后一行清空文件,但它没有。如果您的shell是bash,并且您确实希望在awk中清空文件:请参阅下面的测试:

kent:/tmp$ seq 3 > a.txt
kent:/tmp$ cat a.txt
1
2
3
kent:/tmp$ awk '{system(">a.txt")}'<<<"foo"
kent:/tmp$ cat a.txt
kent:/tmp$ 

如您所见,您希望awk printf>fn}中的最后一行清空文件,但它没有。要从awk中删除文件,可以使用重定向:

echo '' | awk '{ printf("") > "file_to_delete" }'
编辑 正如Kent所指出的,需要关闭该文件才能正常工作。以下修改应足够:

关闭要删除的文件 打印>要删除的文件
要从awk中删除文件,可以使用重定向:

echo '' | awk '{ printf("") > "file_to_delete" }'
编辑 正如Kent所指出的,需要关闭该文件才能正常工作。以下修改应足够:

关闭要删除的文件 打印>要删除的文件

我的愿望实际上是删除awk脚本中的文件。所以这是不可能的?不。您需要运行单独的命令来清空脚本。正如其他答案所说,您可以使用awk清空它,但在运行时不能,这意味着您将无法在单个awk命令中读取、清空以及再次写入和读取。嗯,我正在清空一个文件并从另一个文件读取。在awk的一个循环步骤中,我可以进入一个小while循环,在这个循环中,我插入另一个文件,然后再继续主循环。。。。这不可能吗?我想如果你遵循@Kent的答案,这是可能的。试试看。我不知道系统调用。我的愿望实际上是删除awk脚本中的文件。所以这是不可能的?不。您需要运行单独的命令来清空脚本。正如其他答案所说,您可以使用awk清空它,但在运行时不能,这意味着您将无法在单个awk命令中读取、清空以及再次写入和读取。嗯,我正在清空一个文件并从另一个文件读取。在awk的一个循环步骤中,我可以进入一个小while循环,在这个循环中,我插入另一个文件,然后再继续主循环。。。。这不可能吗?我想如果你遵循@Kent的答案,这是可能的。试试看。我不知道系统调用。我的shell是kornshell。你能解释一下kent:/tmp$awk'{system>a.txt}'你的意思是:systemecho | awk'{printf>file_to_delete}'?@doniy或者不,你可以使用system和shell命令。像猫一样。awk“{systemcat/dev/null>a.txt}”或使用Thor的解决方案,但在printf>file之后关闭该文件。是的,为什么在您的示例中它不清空该文件?我的shell是korn shell。你能解释一下kent:/tmp$awk'{system>a.txt}'你的意思是:systemecho | awk'{printf>file_to_delete}'?@doniy或者不,你可以使用system和shell命令。像猫一样。awk“{systemcat/dev/null>a.txt}”或使用Thor的解决方案,但在printf>file之后关闭文件。是的,为什么在您的示例中它不清空文件?我再次不在awk中,我需要在awk脚本中执行。单引号中的所有内容都由awk执行。因此,在您的情况下,请使用:printf>file_to_delete,其中file_to_delete是您要删除的文件的文件名,或者是保存文件名的变量。@Thor我没有看到OP的整个脚本。但是如果它像他说的那样,在循环中,截断文件,然后重新填充,然后再次截断。您的printf>文件名可能有问题。它第一次只做一次截断,我会在我的答案中做一个例子,以获得更好的代码格式。我再一次不在awk中,我需要在awk脚本中做它。是吗
单引号中的所有内容都由awk执行。因此,在您的情况下,请使用:printf>file_to_delete,其中file_to_delete是您要删除的文件的文件名,或者是保存文件名的变量。@Thor我没有看到OP的整个脚本。但是如果它像他说的那样,在循环中,截断文件,然后重新填充,然后再次截断。您的printf>文件名可能有问题。它第一次只执行一次截断,我会在我的答案中给出一个例子,以获得更好的代码格式。