2013-02-27 69 views
-1

我与2月1日个月的数据文件和我 需要通过每一天即分割文件分割Feb文件Feb_1Feb_2 ... Feb_29拆分一个文件分割成多个文件基于某些条件

这里是我的逻辑:

Inputfile= $1 
monthname = "Feb" 
while getopts : 
datefield="1" 
outfile="Feb_1" 

while read line  
do 
s = `echo "$line" | awk '{print $2}'` 
t = `echo "$line" | awk '{print $3}'` 
if [ "$s" = "$monthname" ] 
    if [ "$t" = "$datefield" ] 
     echo $line > "$outfile" 
    else 
     datefield = $t 
     outfile =$monthaname"_"$t 
     echo $line > "$outfile" 
    fi 
else 
    echo $line > "$outfile" 
fi 
done < "$inputfile" 

s = echo "$line" | awk '{print $2}'

这是我使用$2其请求第二个命令行参数是不是给我的第二个字。我试着在$2之前放',如下所示。

s = echo "$line" | awk '{print '$2}' 

在这种情况下,它抛出一个新的错误假设第一行是Wed Feb 1其抛出的错误作为Wed Feb 1不存在。

这里是样本数据:

Wed Feb 1 00:10:00 cpu usage  
KLOGENT.exe 3068 SYSTEM 00 0:00:00 17345K 15467 BELOW NORMAL  
SGHT.exe 3868 SYSTEM 00 0:00:00 18845K 15499 BELOW NORMAL  
.......  
.......  
Wed Feb 1 00:15:00 cpu usage  
KLTREENT.exe 3068 SYSTEM 00 0:00:00 17345K 15767 BELOW NORMAL  
KJTRT.exe 3868 SYSTEM 00 0:00:00 18845K 13699 BELOW NORMAL  
.............. 
...........  
Wed Feb 1 23:55:00 cpu usage  
HTR.exe 3068 SYSTEM 00 0:00:00 1785K 4532 BELOW NORMAL  
KLU.exe 3868 SYSTEM 00 0:00:00 15645K 678 BELOW NORMAL  
............... 
................. 
Thu Feb 2 00:10:00 cpu usage 
JUYT.exe 3068 SYSTEM 00 0:00:00 143245K 157767 BELOW NORMAL 
GFD.exe 3868 SYSTEM 00 0:00:00 18845K 879 BELOW NORMAL  
.........................  
.......................  
Thu Feb 28 00:15:00 cpu usage  
FRE.exe 3068 SYSTEM 00 0:00:00 143245K 157767 BELOW NORMAL  
YUT.exe 3868 SYSTEM 00 0:00:00 18845K 879 BELOW NORMAL  
............................  
...................  
Thu Feb 28 23:55:00 cpu usage  
TRE.exe 3068 SYSTEM 00 0:00:00 143245K 157767 BELOW NORMAL  
KJH.exe 3868 SYSTEM 00 0:00:00 18845K 879 BELOW NORMAL 
+3

您可以从输入文件添加示例数据吗? – Alex 2013-02-27 19:06:29

+0

可怕的格式!不要添加非答案作为答案更新问题。你真的**需要阅读[FAQ](http://stackoverflow.com/faq) – 2013-03-01 11:23:52

回答

2

凝视我的水晶球来确定输入数据,你想:

awk '{print > $2 "_" $3 }' input-file 

或可能

awk '$2 == "Feb" {print > $2 "_" $3 }' input-file 

这将是多大如果输入的实际格式是已知的,则更简单地提供解决方案。

1
awk '/Feb/{file=$2"_"$3}{print $0>file".txt"}' your_log 
+0

比我使用grep和通过我的66GB文件迭代200次的想法更有效:) 将其更改为此展现进步。 'pv your_log | awk'/ Feb/{file = $ 2“_”$ 3} {print $ 0> file“.txt”}'' – 2017-02-19 15:10:55

相关问题