O que é o comando sed para corrigir este arquivo de modo que o segundo para o último booleano seja convertido em oposto

0

Dê um arquivo contendo linhas de texto, como

"00007960-9d81-4192-b548-ad33d6b0ca54","true",0.984725773335,"false",1.0,"true",0.808817088604,"false",0.705779910088,"false",0.928222000599,"false",0.999984204769,"false",1.0,"false",0.904409646988,"true",0.979391694069,"true",0.977430343628,"false",0.999999582767

qual é o comando sed (ou similar) para corrigir este arquivo, então o segundo valor booleano em cada linha é substituído pelo valor oposto. Assim, para algumas linhas, o valor "false" se tornará "true" e, para outras, o valor "true" se tornará "false"

"00007960-9d81-4192-b548-ad33d6b0ca54","true",0.984725773335,"false",1.0,"true",0.808817088604,"false",0.705779910088,"false",0.928222000599,"false",0.999984204769,"false",1.0,"false",0.904409646988,"true",0.979391694069,"false",0.977430343628,"false",0.999999582767

(note que o segundo até o último verdadeiro se tornou falso)

    
por Paul Taylor 08.12.2015 / 12:38

2 respostas

3

Experimente awk :

awk -F, 'BEGIN{a["\"true\""] = "\"false\""; a["\"false\""] = "\"true\""; OFS=","} {$(NF - 3) = a[$(NF - 3)]}1'

Isso pressupõe que o terceiro último campo de cada registro seja um "true" ou "false" .

Os testes a seguir, se o terceiro e último campo for "true" ou "false" :

awk -F, 'BEGIN{a["\"true\""] = "\"false\""; a["\"false\""] = "\"true\""; OFS=","} $(NF -3) in a {$(NF - 3) = a[$(NF - 3)]}1'
    
por muru 08.12.2015 / 12:55
2

com bash :

#!/bin/bash
    while IFS=, read -r -a line; do 
       if [ "${line[@]:(-4):1}" = \"true\" ]; then 
           IFS=,; printf '%s\n' "${line[*]:0:$((${#line[@]}-4))},\"false\",${line[*]:(-3)}"
       else
           IFS=,; printf '%s\n' "${line[*]:0:$((${#line[@]}-4))},\"true\",${line[*]:(-3)}"
       fi
    done <file.txt

Aqui estamos criando uma matriz de cada linha com elementos separados em , .

Então, estamos verificando se o 4º elemento do final é "true" ou "false" e, em seguida, a substituição é feita de acordo.

    
por heemayl 08.12.2015 / 13:18