好的,我有大约 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/
。