2

ログ ファイルにいくつかのフィールドがあり、次のスクリプトを使用してそれらを CSV に変換できました。

#!/bin/bash
INPUT=/home/MSC11/khanm/wwwp11dorganiser.co.uk_log
OUTPUT="/home/MSC11/khanm/output-$(basename $INPUT | cut -d'.' -f1).csv"
# field names
s=1
ip=
dt=
method=
target=
protocol=
statuscode=
reference=
echo -n "Processing..."
# empty output file
>$OUTPUT
# read input line by line
while IFS= read -r line
do
   # get data
    ip=$(cut -d" " -f1<<<"$line")
    dt=$(cut -d" " -f4<<<"$line")
    method=$(cut -d" " -f6<<<"$line")
    target=$(cut -d" " -f7<<<"$line")
    protocol=$(cut -d" " -f8<<<"$line")
    statuscode=$(cut -d" " -f9<<<"$line")
    reference=$(cut -d" " -f11<<<"$line")
    # write cvs formatted output
    echo "${s},${ip},${dt},${target},${method},${protocol},${statuscode},${reference}" >>$OUTPUT
    # update counter
    s=$(( ++s ))
done < "$INPUT" 
echo "done."
echo "Total ${s} line processed and wrote to $OUTPUT cvs file."

変数「dt」の形式は、2007 年 11 月 29 日:20:42:09 です。これを2つに分けたい。1 つは 2007 年 11 月 29 日の形式の日付で、もう 1 つは 20:42:09 の形式です。カットコマンドを回避しましたが、それができませんでした。どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

3
cut -d: -f1 <<< $dt
29/Nov/2007
cut -d: -f2- <<< $dt
20:42:09
于 2012-05-21T16:20:26.343 に答える