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

Linux : Move files that have more than 100 commas in one line

我在特定目录中有 100 个文件,其中包含多条记录,这些记录的字段以逗号分隔。

我需要使用 Linux 命令来检查每个文件中的行 如果该行包含超过 100 个逗号,则将其移动到另一个目录。

可以吗?

更新答案

虽然我下面的原始答案是实用的,但格伦 (@glennjackman) 在评论中的建议更加简洁、惯用、eloquent 和更可取 - 如下:

#!/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 和 运行,以便它真正移动它们。先备份!