1

以下を含むファイルがあります。

aaa.bbbb0.xxxx0=toto
aaa.bbbb0.xxxx1=toto
aaa.bbbb0.xxxx2=titi
eee.ffff.zzzz=kkkk

"aaa\.bbbb0\.xxxx[0-6]\+=toto"正規表現を含む行を抽出し、パスの 3 番目の要素を抽出したいと考えています。したがって、出力はこのように見えるはずです

xxxx
yyyy

この出力は、次の方法で取得できgrepますcut

cat myfile.txt | grep "aaa\.bbbb0\.xxxx[0-6]\+=toto" | cut -d'=' -f1 | cut -d'.' -f3

grep上記をcut1つのsedコマンドまたはコマンドだけで変更するにはどうすればよいawkですか?

4

3 に答える 3

5

前の質問への回答:

awk -F'[.=]' '$4 ~ /^[[:digit:]]+$/ {print $3}' file

現在の質問への回答:

$ awk -F'[.=]' '/aaa\.bbbb0\.xxxx[0-6]+=toto/ {print $3}' file
xxxx0
xxxx1
于 2014-05-06T16:55:16.100 に答える
4
awk -F[.=] '/=mmmm/{print $3}' input.txt

最初の編集のデータを一致させるには:

awk -F[=] '$2 ~ /^[0-9]+(\.[0-9]+)?$/{split($1,a,".");print a[3]}' input.txt

これは浮動小数点数にも一致します

そして2回目の編集

awk -F= '/aaa\.bbbb0\.xxxx[0-6]+=toto/{split($1,a,".");print a[3]}' input.txt
于 2014-05-06T16:49:47.783 に答える
3

オプションを使用grep -Pして PCRE を有効にすると、正の先読みと後読みを使用して出力を取得できます。

$ cat file
aaa.bbbb.xxxx=4521
ccc.dddd.yyyy=7842
eee.ffff.zzzz=kkkk

$ grep -oP '(?<=\.)(\w+)(?==\d+$)' file
xxxx
yyyy 

別のawkバリアント:

$ awk -F. '{split($3,a,/=/); if (a[2]~/^[[:digit:]]+$/) print a[1]}' file
xxxx
yyyy

更新された質問に基づく:

$ awk -F. '/aaa\.bbbb0\.xxxx[0-6]+=toto/{split($3,a,/=/); print a[1]}' file
xxxx0
xxxx1
于 2014-05-06T17:00:59.477 に答える