【问题标题】:Delete file based on condition根据条件删除文件
【发布时间】:2021-02-21 03:47:44
【问题描述】:

我有一个包含文本文件的目录,这些文件用于某些计算,它会生成四个列文件

喜欢:

0.5000 -0.9650 6.6554 3.4228

当第 2 列大于零且第 3 列小于零时,我想从文件夹中删除该文件。我尝试了以下脚本:

#!bin/sh
for file in /home/dew/*.txt
    do
    some calulation for producing four column `file1`
    if awk '{print ($2 > 0 && $3 < 0)}' file1 | rm -rf $file
done

但它给出了一些错误

【问题讨论】:

  • 请回滚到您之前的问题,现在这根本不是问题。请用详细信息回复您的问题,否则未来的用户将不会从当前描述中获得任何信息。
  • 请注意,您接受的答案是错误的,现已更新。

标签: awk sh


【解决方案1】:

你可以使用这个awk + xargs:

cd /home/dew
awk -v ORS='\0' '$2 > 0 && $3 < 0 {print FILENAME; nextfile}' *.txt | 
xargs -0 rm

【讨论】:

  • 也许我在这里遗漏了一些东西,但awk 不会总是以0 状态退出吗?除非发生错误,否则默认的 awk 退出状态为 0。在上面,语句awk '$2 &gt; 0 &amp;&amp; $3 &lt; 0 {exit 0}' "$file" 将始终返回退出状态0,因此删除所有文件。如果你想根据条件删除,你应该退出零,然后使用||。更像是:awk '$2 &gt; 0 &amp;&amp; $3 &lt; 0 {exit 1}' "$file" || echo rm "$file"
  • 好点@kvantour我现在已经改变它完全在awk中完成
  • 这不会造成竞争条件吗?试图读取已被删除的文件?这可能会导致意外行为吗?
  • 在我对目录中 6 个文件的测试中,它没有。但可能是:awk '$2 &gt; 0 &amp;&amp; $3 &lt; 0 {print FILENAME; nextfile}' *.txt | xargs rm?
  • 最终更新 ;-) BEGIN{ORS="\000"} .... | xargs -0 有趣的文件名 ;-)
猜你喜欢
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多