2013-02-27 4 views
-1

У меня есть файл с 1 месяца данные для Feburary и я нужно разделить файл на каждый день т.е. разделить Feb файл Feb_1, Feb_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

+0

Ужасное форматирование! Не добавляйте ответы без ответа, так как ответ обновляет вопрос. Вы ** действительно ** должны прочитать [FAQ] (http://stackoverflow.com/faq) –

ответ

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> файл ".txt"}' ' –

Смежные вопросы