【发布时间】:2021-12-13 01:36:24
【问题描述】:
我有一个这种格式的时间戳:
(normal_file.csv)
timestamp
19/02/2002
19/02/2002
19/02/2002
19/02/2002
19/02/2002
19/02/2002
日期通常是统一的,但是,有些文件的日期模式不规则,例如这个例子:
(异常文件.csv)
timestamp
19/02/2002
19/02/2003
19/02/2005
19/02/2006
在我的目录中,有数百个文件,由 normal.csv 和异常.csv 组成。
我想编写一个 bash 或 awk 脚本来检测目录中所有文件中的日期模式。带有异常 .csv 的文件应该自动移动到一个新的、单独的目录(比如 dir_different/)。
目前,我尝试了以下方法:
#!/bin/bash
mkdir dir_different
for FILE in *.csv;
do
# pipe 1: detect the changes in the line
# pipe 2: print the timestamp column (first column, columns are comma-separated)
awk '$1 != prev {print ; prev = $1}' < $FILE | awk -F , '{print $1}'
done
如果给定文件中的时间戳是正常的,那么只会打印一个时间戳;但是对于异常文件,会打印多个日期。
我不知道如何将异常文件与正常文件分开,我尝试了以下方法:
do
output=$(awk 'FNR==3{print $0}' $FILE)
echo ${output}
if [[ ${output} =~ ([[:space:]]) ]]
then
mv $FILE dir_different/
fi
done
或者有没有更简单的方法来检测行的变化并分离具有不同行的文件?感谢您的任何建议:)
【问题讨论】:
-
你考虑过使用
sort -u吗? -
打印所有时间戳对您来说有多重要?如果您真正想要的只是分离可以简化事情的文件。
-
@RomeoNinov:感谢您的评论和建议。
sort -u file.csv在这种情况下不起作用,因为日期列的顺序应该保持原样而不改变它们的位置。某些文件中的日期没有按照顺序...