次のようなログファイルがあります。
Mar 23 08:20:23 New file got created in sec: 235
Mar 23 08:21:45 New file got created in sec: 127
Mar 23 08:22:34 New file got created in sec: 875
Mar 23 08:25:46 New file got created in sec: 322
Mar 23 08:26:12 New file got created in sec: 639
次のような出力が必要です。
Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
私ができることは、行の最初の部分か最後の部分のどちらかをgrepすることです。 2つを組み合わせることができません。入力から必要な出力を取得するにはどうすればよいですか?
あなたはこのようなことをすることができます
awk '{print $1,$2,$3,":",$NF}' logfile
次のようにカットを使用できます。
コマンド:
cut --complement -c17-43 file1.txt
出力:
Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
sed
を使用できます:
sed -r "s/^(.{15} ?).*(.{5})$/\1\2/" logfile
提案に従って、私は最初のパターンをゼロ詰めされない可能性がある1桁の日に対応させ、中央のパターンをより柔軟にするために.*
を使用しました。
Awkでは、このようなものです。とても簡単です。
[zee@dev-instance temp]$ cat file1.txt
Mar 23 08:20:23 New file got created in sec: 235
Mar 23 08:21:45 New file got created in sec: 127
Mar 23 08:22:34 New file got created in sec: 875
Mar 23 08:25:46 New file got created in sec: 322
Mar 23 08:26:12 New file got created in sec: 639
[zee@dev-instance temp]$ awk -F" " '{ print $1" "$2" "$3" : "$10 }'<file1.txt
Mar 23 08:20:23 : 235
Mar 23 08:21:45 : 127
Mar 23 08:22:34 : 875
Mar 23 08:25:46 : 322
Mar 23 08:26:12 : 639
[zee@dev-instance temp]$
Perl -F '' -lane 'print @F[0..15, -5..-1]' yourfile
-F ''
=>行を個々の文字IOWに分割します。すべてのフィールドは1文字の太さです。
-l
=> ORS=\n
-a
=> @F array holds the fields, e.g., $F[15] => holds the 16-th character
-n
=> don't print unless specifically asked to
@F[0..15, -5..-1]
=>は配列のスライスです@F
最初の16文字と最後の5文字で、cut
のように
これはどう:
sed -e 's/^\(.\{4\}\).*\(.\{4\}\)$/\1 \2/'
(I/Oリダイレクトを理解したり、ファイル名を指定したりできます。詳細については、sed(1)を参照してください。)
ここでは、文字数を正確に4に選択しましたが、好きな数に置き換えることができます。最初と最後の文字数は異なる場合があることに注意してください。
sed -e 's/^\(.\{5\}\).*\(.\{2\}\)$/\1 \2/'
これにより、各行の最初の5文字と最後の2文字が返されます。これをさらにパラメーター化する方法を理解するのは、あなたに任せます。
また、私はgrep(1)(またはそのバリアントの1つ)ではなくsed(1)を選択したことに注意してください。これは、sed正規表現ではなく、grep正規表現を要求した場合とまったく異なる場合があることを知っています。
あなたはこのようなことをすることができます
cut -c1-15 logfile > file;
cut -c44- logfile > file1;
paste file file1 > logfilenew;
rm file file1;
cat logfilenew
出力はlogfilenewに保存されます。