以下を出力するファイルがあります
Sending showtrans string ...
Oldest redo log files necessary to restart Extract are:
Redo Thread 1, Redo Log Sequence Number 29334, SCN 3364.4078507030 (14452348490774), RBA 673593872
Redo Thread 2, Redo Log Sequence Number 12371, SCN 3365.484854852 (14453049805892), RBA 3443216
XID Items Extract Redo Thread Start Time SCN Redo Seq Redo RBA Status
-----------------------------------------------------------------------------------------------------------------------------------------------
75.2.549177 0 sting1 1 2015-12-23:07:26:47 3364.4078507030 (14452348490774) 29334 673593872 Running
126.6.3078970 sting2 1 2015-12-24:00:22:11 3365.308496723 (14452873447763) 29364 6462055952 Running
出力は次のようになります。
75.2 sting1
126.6 sting2
答え1
これは働きます:
awk '{split($1,a,".");if(a[1]!="") if(a[1]+0==a[1]){printf "%d.%d %s\n", a[1], a[2], ($2+0==$2)?$3:$2}}' input.txt
その後、2番目の列がないことを確認して適切な列を取得します。
答え2
複数のスペースをフィールド区切り文字として扱い、単一のスペースをデータの一部として扱うことができます。
awk -F' +|[.]' '$1~"^[0-9]+"{print $1"."$2,$4}' file
出力:
75.2 sting1
126.6 sting2
答え3
そうではないことを知っていますが、awk
すでに答えを知っているawk
ので、別のアプローチを提案します。
私はこれを行うことができます:
perl -lne 'print "$1 $2" if m/^(\d+\.\d+)[^a-z]*(\w+)/' long_trans.txt
パターンマッチングを適用し、一致した場合はキャプチャした内容を印刷します。
^ # start of line
(\d+\.\d+) # digits seperated by a literal . (capturing)
[^a-z] # anything that isn't [a-z]
(\w+) # word characters (alphanumerics mostly) (capturing)