以下の行を含むファイルがあります。
/logs/tc0001/Tomcat/tomcat7.1/conf/catalina.properties:app.env.server.name = demo.example.com
/logs/tc0001/Tomcat/tomcat7.2/conf/catalina.properties:app.env.server.name = quest.example.com
/logs/tc0001/Tomcat/tomcat7.5/conf/catalina.properties:app.env.server.name = www.example.com
上記の出力では、3つのフィールド(番号2、4と最後のフィールド*.example.com
)を抽出したいと思います。次のような出力が得られます。
cat file | awk -F'/' '{print $3 "\t" $5}'
tc0001 Tomcat7.1
tc0001 Tomcat7.2
tc0001 Tomcat7.5
'='
の後にあるドメイン名で最後のフィールドも抽出するにはどうすればいいですか? multiple delimiter
を使ってフィールドを抽出する方法
区切り文字は正規表現にすることができます。
awk -F'[/=]' '{print $3 "\t" $5 "\t" $8}' file
を生成します。
tc0001 Tomcat7.1 demo.example.com
tc0001 Tomcat7.2 quest.example.com
tc0001 Tomcat7.5 www.example.com
良い知らせです。 awk
フィールドセパレータは正規表現にすることができます。あなただけの-F"<separator1>|<separator2>|..."
を使用する必要があります。
awk -F"/|=" '{print $3, $5, $NF}' file
戻り値:
tc0001 Tomcat7.1 demo.example.com
tc0001 Tomcat7.2 quest.example.com
tc0001 Tomcat7.5 www.example.com
ここに:
-F="/|="
は、入力フィールドの区切り文字を/
または=
に設定します。次に、出力フィールドの区切り文字をタブに設定します。
{print $3, $5, $NF}
は、入力フィールドの区切り文字に基づいて3番目、5番目、および最後のフィールドを出力します。
別の例を見てください。
$ cat file
hello#how_are_you
i#am_very#well_thank#you
このファイルには#
と_
の2つのフィールド区切り文字があります。セパレータがどちらであっても2番目のフィールドを印刷したい場合は、両方をセパレータにしましょう。
$ awk -F"#|_" '{print $2}' file
how
am
ファイルの番号は次のとおりです。
hello#how_are_you i#am_very#well_thank#you
^^^^^ ^^^ ^^^ ^^^ ^ ^^ ^^^^ ^^^^ ^^^^^ ^^^
1 2 3 4 1 2 3 4 5 6
空白が一致している場合は、\t
を直接挿入する代わりにこれを区切り文字として使用できます。出力区切り文字を設定すると、自動的に含まれるようになります。
< file awk -v OFS='\t' -v FS='[/ ]' '{print $3, $5, $NF}'
2
から5
までの任意の数のフィールド区切り文字、または文字a
、#
、または区切り文字を2回以上6回以下の範囲で繰り返す必要がある場合
awk -F'[2-5a# ]{2,6}' ...
私は()とパラメータを使ってこれの変形が存在すると確信しています
Perlのワンライナー:
Perl -F'/[\/=]/' -lane 'print "$F[2]\t$F[4]\t$F[7]"' file
これらのコマンドラインオプションが使用されます。
-n
は入力ファイルのすべての行をループし、その行を$_
変数に入れます。すべての行を自動的には表示しません。
-l
は処理前に改行を削除し、その後それらを追加し直します
-a
自動分割モード - Perlは自動的に入力行を@F
配列に分割します。空白で分割するデフォルト
-F
autosplit修飾子、この例では/
または=
のどちらかに分割されます
-e
はPerlコードを実行します
Perlはawkと密接に関係していますが、@F
autosplit配列はインデックス$F[0]
で始まり、awkフィールドは$ 1で始まります。
私は多くの完璧な答えが出ているのを見ていますが、それでも私のコードをアップロードしたいと思います、
awk -F"/" '{print $3 " " $5 " " $7}' sam | sed 's/ cat.* =//g'