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
和 运行,以便它真正移动它们。先备份!
我在特定目录中有 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
和 运行,以便它真正移动它们。先备份!