我在一个目录中有多个文件,少数文件具有不同的格式。我希望将那些具有指定格式的内容与那些没有指定格式的内容分开。有超过 500 个文件,这使得手动执行非常耗时,因此我认为某种形式的 bash 方法是最好的。
目录示例,
hello.txt
example.txt
world.txt
...
所需格式的示例,
Hello \t World \t Hi
我想要做的是将具有所需格式的文件移动和/或复制到单独的文件夹中。
有条件的方法类似于:
awk -F"\t" {' $1 ~ "[a-zA-Z] && $2 ~ "[a-zA-Z]" && $3 ~ "[a-zA-Z]" && NF < 5}
所以在这种方法中
$1 contains alpha
$2 contains alpha
$3 contains alpha
and the number of delimiters are below 5 ( incase )
这将适用于单个文件,只需进行最少的调整,但我需要它来处理目录中的每个文件,并减慢每个文件检查的每一行的处理速度,检查可以设置为第 1 行或第 2 行等。
答案1
有了 GNU awk
,mv
你可以这样做:
gawk -F'\t' -v ORS='\0' '
NF < 5 && $1 ~ /[[:alpha:]]/ && $2 ~ /[[:alpha:]]/ && $3 ~ /[[:alpha:]]/ {
print FILENAME; nextfile
}' ./*.txt | xargs -r0 mv -t destination-directory
它将移动到destination-directory
名称以 结尾.txt
且至少包含一行少于 5 个字段(少于 4 个分隔符)且前 3 个字段包含至少一个字母字符的(非隐藏)文件。
grep
这也可以通过 GNU和以下方式完成mv
:
grep -lZxP '([^\t]*[[:alpha:]][^\t]*)\t(?1)\t(?1)(\t[^\t]*)?' ./*.txt |
xargs -r0 mv -t destination-directory