awk para substituir colunas e imprimir se a condição for statisfy

1

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
    
por dils 24.12.2015 / 14:56

3 respostas

1

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.

    
por 24.12.2015 / 15:15
0

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
    
por 24.12.2015 / 15:25
0

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)
    
por 24.12.2015 / 21:18