Puncte:1

bash: Cum se creează o pereche cheie, valoare din fișierul .txt în Linux

drapel cn
w | awk 'NR==1 {printează $1}' >fișier.txt
dosar pentru pisici
UTILIZATOR TTY DIN LOGIN@ IDLE JCPU PCPU CE
lava1 puncte/0 157.48.149.102 05:03 31.00s 0.31s 0.31s -bash
azureuse puncte/1 157.48.149.102 07:26 0.00s 0.07s 0.05s w

Din fișierul text de mai sus, vreau să creez perechi cheie, valoare, cum ar fi formatul json, așa cum este mai jos rezultatul așteptat:

{
 „USER” : „lava1”,
 „TTY” : „puncte/1”,
 „FROM” : „157.47.49.254”,
 „LOGIN” : „12:32”,
 „IDLE” : „5.00s”
}
drapel cn
În bash? vezi https://stackoverflow.com/questions/48470049/build-a-json-string-with-bash-variables
Andrej Podzimek avatar
drapel cn
Comanda `awk` din întrebarea dvs. nu are sens. În primul rând, scrie într-un fișier diferit, nu în cel pe care îl „pisica” de mai jos. În al doilea rând, `file.txt` va conține ora curentă (de la ieșirea `w`), nu liniile pe care le conține `file`.
Andrej Podzimek avatar
drapel cn
`PROCPS_USERLEN=32 PROCPS_FROMLEN=32 w | coada -n+2 | while read -r user tty from login idle discard; do echo -e '{\n "USER": "'"$user"'",\n "TTY": "'"$tty"'",\n "FROM" : "'"$from"'" ,\n "LOGIN" : "'"$login"'",\n "IDLE" : "'"$idle"'"\n}'; done` Oricum, cele două variabile de mediu arată de ce analiza rezultatului de la `w` este pur și simplu o idee proastă. Ca să nu mai vorbim că ar putea fi necesar să exportați (de exemplu) `LC_ALL=en_US.UTF-8` pentru a obține rezultate consistente. În caz contrar, data de conectare va fi specificată în localitatea curentă etc.
Puncte:2
drapel hr

aș sugera Miller pentru ceva de genul acesta - în special, convertiți de la „pretty print” în JSON:

$ mlr --ipprint --ojson fișier cat
{ „USER”: „lava1”, „TTY”: „pts/0”, „FROM”: „157.48.149.102”, „LOGIN@”: „05:03”, „IDLE”: „31.00s”, „ JCPU": "0.31s", "PCPU": "0.31s", "WHAT": "-bash" }
{ „USER”: „azureuse”, „TTY”: „pts/1”, „FROM”: „157.48.149.102”, „LOGIN@”: „07:26”, „IDLE”: „0.00s”, „ JCPU": "0.07s", "PCPU": "0.05s", "WHAT": "w" }

Selectarea câmpurilor specifice cu a tăia și redenumirea AUTENTIFICARE@ camp:

$ mlr --ipprint --ojson cut -f USER,TTY,FROM,LOGIN@,IDLE apoi redenumiți LOGIN@,fișier LOGIN
{ „USER”: „lava1”, „TTY”: „pts/0”, „FROM”: „157.48.149.102”, „LOGIN”: „05:03”, „IDLE”: „31.00s” }
{ „USER”: „azureuse”, „TTY”: „pts/1”, „FROM”: „157.48.149.102”, „LOGIN”: „07:26”, „IDLE”: „0.00s” }
Puncte:0
drapel cn

Deoarece doriți să produceți JSON, să folosim

w \
| coada -n +3 \
| jq -R '. | split("\s+"; "g") | {USER:.[0], TTY:.[1], FROM:.[2], LOGIN:.[3], IDLE:.[4]}'

eu folosesc coadă pentru a sări peste primele 2 rânduri ale w ieșire.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.