如何在文件内容中查找数字范围并将包含数字范围的文件移动到另一个目录?

如何在文件内容中查找数字范围并将包含数字范围的文件移动到另一个目录?

好的,我有大约 90 个文件,每个文件的正文如下

187942           78.9

我想过滤第二列中值介于 70 到 90 之间的文件,并将它们移动到另一个目录。

答案1

您可以使用一个小脚本来awk区分好/坏文件。例如,如下所示:

#!/bin/bash
mkdir -p another-directory
for f in * ; do 
    if ! awk '$2>=70 && $2<=90 { exit 1; }' "$f" ; then
        mv -- "$f" another-directory/
    fi
done

这里的关键是这exit 1是一个失败退出,因此条件短语 withawk只是发现第二个标记是 70 到 90(含)之间的数字的行的存在。否则awk正常退出,成功。感叹号否定它,当文件有好行时,使条件为真,否则为假。

答案2

使用awk

awk '$2>70&&$2<90&&!a[FILENAME]++{printf("%s%c",FILENAME,0)}' * | xargs -0 cp -vt target/ --

解释:

  • $2>70&&$2<90条件。
  • !a[FILENAME]++如果文件名是唯一的(文件名将只打印一次),则为真。
  • printf("%s%c",FILENAME,0)使用空字节分隔符打印文件名,以应对特殊文件名。
  • xargs -0读取以空字节分隔的文件名。
  • cp -vt target/ --将文件复制到目录target/

相关内容