我在特定目录中有100个文件,其中包含多个记录,其中的字段用逗号分隔。
我需要使用Linux命令来检查每个文件中的行 如果该行包含超过100个逗号,则将其移动到另一个目录。
有可能吗?
答案 0 :(得分:4)
更新了答案
虽然我的原始答案是有效的,但Glenn(@glennjackman)在评论中的建议更为简洁,惯用,有说服力且更可取 - 如下:
#!/bin/bash
mkdir subdir
for f in file*; do
awk -F, 'NF>100{exit 1}' "$f" || mv "$f" subdir
done
它基本上依赖于awk
的退出状态0
,然后在遇到需要移动的文件时只将其设置为1
。
原始答案
这将告诉您文件在任何一行上是否有超过100个逗号:
awk -F, 'NF>100{print 1;exit} END{print 0}' someFile
如果文件中的任何行超过100,它将打印1
并退出而不解析文件的其余部分,如果不是则打印0
。
如果您想移动它们,请使用
#!/bin/bash
mkdir subdir
for f in file*; do
if [[ $(awk -F, 'NF>100{print 1;exit}END{print 0}' "$f") != "0" ]]; then
echo mv "$f" subdir
fi
done
尝试此操作,看看它是否选择了正确的文件,如果您愿意,请删除单词echo
并再次运行,以便实际移动它们。先备份!