Isso deve funcionar:
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
Isto irá verificar quando a segunda coluna está faltando, então ela recebe a coluna apropriada.
Eu tenho um arquivo com a saída abaixo
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
Eu preciso da saída como:
75.2 sting1
126.6 sting2
Você pode tratar mais de um espaço como um separador de campo e um único como parte dos dados:
awk -F' +|[.]' '$1~"^[0-9]+"{print $1"."$2,$4}' file
Saída:
75.2 sting1
126.6 sting2
Eu sei que não é awk
- mas você já tem awk
de respostas e, portanto, ofereço uma abordagem alternativa.
Eu provavelmente faria assim:
perl -lne 'print "$1 $2" if m/^(\d+\.\d+)[^a-z]*(\w+)/' long_trans.txt
Aplicamos uma correspondência de padrão. Se corresponder, imprimiremos o que foi capturado:
^ # 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)
Tags text-processing awk