Linux:在一行中移动超过100个逗号的文件

我在一个特定的目录中有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这个词并再次运行它,以便实际移动它们。 先备份吧!