-1

2 月の 1 か月のデータを含むファイルがあり、Febファイルを毎日分割する必要があります。Feb_1Feb_2Feb_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}'

$22 番目のコマンド ライン引数を要求しているため、これは 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
4

2 に答える 2

2

入力データを決定するために水晶玉を見​​つめると、次のことが必要になります。

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

またはおそらく

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

入力の実際の形式がわかっている場合は、ソリューションを提供するのがはるかに簡単になります。

于 2013-02-27T19:23:21.550 に答える
1
awk '/Feb/{file=$2"_"$3}{print $0>file".txt"}' your_log
于 2013-03-01T12:37:22.903 に答える