我有一个这样的日志文件:
20141107 14:15:02;10.0.0.5;/home/it/17066.txt;0
20141107 14:15:32;10.0.0.5;/home/it/17076.txt;0
20141107 14:16:15;10.0.0.5;/home/it/17086.txt;0
...
我的bash脚本解析大日志文件并创建新的小日志文件。脚本检查小日志文件,如果不存在,请创建:
if [ ! -f "$path/$name" ]; then
mkdir -p "$path"
touch "$path/$name"
echo "$year$month$day $time;$ip;$file;$size" >> "$path/$name"
fi
如果日志文件存在,我想写入该文件。我试试这个:
if [ ! -f "$path/$name" ]; then
mkdir -p "$path"
touch "$path/$name"
echo "$year$month$day $time;$ip;$file;$size" >> "$path/$name"
else
echo "$year$month$day $time;$ip;$file;$size" >> "$path/$name"
fi
如果文件存在与否,它是否正常工作。但是在日志文件中写相同的行:
20141107 14:15:02;10.0.0.5;/home/it/17066.txt;0
20141107 14:15:32;10.0.0.5;/home/it/17076.txt;0
20141107 14:16:15;10.0.0.5;/home/it/17086.txt;0
20141107 14:15:02;10.0.0.5;/home/it/17066.txt;0
20141107 14:15:32;10.0.0.5;/home/it/17076.txt;0
20141107 14:16:15;10.0.0.5;/home/it/17086.txt;0
...
如果日志文件中存在行,则需要执行写操作。如果日志文件中存在行,则跳过。
我该怎么办?
答案 0 :(得分:1)
str="$year$month$day $time;$ip;$file;$size"
if ! grep -q "^$str$" "$path/$name"; then
echo "$year$month$day $time;$ip;$file;$size" >> "$path/$name"
fi
请注意,如果输出文件变大,则效率不高。
答案 1 :(得分:0)
为什么不这样做:
if [ ! -f "$path/$name" ]; then
mkdir -p "$path"
touch "$path/$name"
fi
echo "$year$month$day $time;$ip;$file;$size" >> "$path/$name"