我在一个特定的目录中有100个文件,其中包含多个以逗号分隔的字段的logging。
我需要使用Linux命令来检查每个文件中的行,如果行中包含超过100个逗号,请将其移至另一个目录。
可能吗 ?
更新的答案
虽然我原来的答案是功能性的,但是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
它将打印1
并退出而不解析文件的剩余部分,如果文件中有超过100行的任何行,则打印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
这个词并再次运行它,以便实际移动它们。 先备份吧!