substituindo valores condicionalmente, adicionando comentário

0

o jq imprime csv como em:

... | [.name, .userId, .groupId] | @csv'

o que imprime:

"nodea","0","6"
"nodeb","1","0"

como posso processá-lo para obter "n / a" em vez de 0, e para > 0 valores nota / comentário apropriado, por exemplo:

"nodea","n/a","group:6"
"nodeb","user:1","n/a"

É viável em jq ou somente pós-processamento, por exemplo. no awk? obrigado

    
por DonJ 16.01.2018 / 17:41

2 respostas

4

jq solução:

Amostra input.json :

[
    {
        "name": "nodea",
        "userId": 0,
        "groupId": 6
    },
    {
        "name": "nodeb",
        "userId": 1,
        "groupId": 0 
    }
]
jq -r 'def pr($k): if .[$k] > 0 then $k+":\(.[$k])" else "n/a" end;
      .[] | [ .name, pr("userId"), pr("groupId") ] | @csv' input.json

A saída:

"nodea","n/a","groupId:6"
"nodeb","userId:1","n/a"
    
por 16.01.2018 / 19:26
-1

Eu obtive o resultado mencionado usando o comando abaixo

sample.csv

"nodea","0","6"
"nodeb","1","0"

comando

sed 's/"//g' sample.csv|awk  -F "," '{print $0}' |awk -F "," '$3 > 0 {print $1,$2,"group:"$3}' | sed "s/0/n\/a/g"| sed 's/ /","/g'| sed 's/$/"/g'| sed 's/^/"/g';sed 's/"//g' sample.csv|awk  -F "," '{print $0}' |awk -F "," '$2 > 0 {print $1,"user:"$2,$3}'|  sed "s/0/n\/a/g"| sed 's/ /","/g'|sed 's/$/"/g'| sed 's/^/"/g'

saída

"nodea","n/a","group:6"
"nodeb","user:1","n/a"
    
por 16.01.2018 / 20:14

Tags