Puncte:0

Cum să tipăriți anumite cuvinte dintr-un fișier

drapel za

Am un fișier care este așa

utilizator:[dgalanos] rid:[0xa35]
utilizator:[roleary] rid:[0xa36]
utilizator:[smorgan] rid:[0xa37]

Cum pot imprima doar numele de utilizator ca acesta

dgalanos
rolar
smorgan

am incercat

cat users.txt | awk -F ':' '{print $2 > "users3.out"}'

Dar nu mi-a dat rezultatul corect pe care îl așteptam.

αғsнιη avatar
drapel cn
nu utilizați [awk redirection](https://www.gnu.org/software/gawk/manual/html_node/Redirection.html) în `awk '{print $2 > "users3.out"}' input` când nu este nevoie și de fapt ați vrut o redirecționare shell `awk '{print $2}' input > users3.out `.
Puncte:1
drapel in

Dacă setați două puncte ca separator de câmp, linia

utilizator:[dgalanos] rid:[0xa35]

va fi împărțit în

utilizator
[dgalanos] rid
[0xa35]

Bănuiesc că vrei să împărți la oricare dintre două puncte sau spațiu, apoi scoateți parantezele:

De asemenea, awk implicit pentru a citi dintr-un fișier, nu este nevoie de pisică:

awk -F '[: ]' '{gsub(/[][]/,"",$2); printează $2}' users.txt > users3.out

Sau folosiți parantezele ca separator de câmp:

awk -F '[][]' '{print $2}' users.txt > users3.out

Oricum, pentru o astfel de sarcină, aș prefera grep:

grep -Po 'utilizator:\[\K[^]]*' users.txt > users3.out
Puncte:0
drapel gr

Cel mai simplu mod este să vă modificați comanda după cum urmează:

awk -F '[' '{print $2}' users.txt | awk -F ']' '{print $1}' > users3.out

  • Folosesc două conducte awk a prinde la început ceea ce este după [ și apoi ce este după ]. Delimitatorul care vă interesează nu este punctul și punctul, ci parantezele.
  • Conducte | înseamnă că ieșirea primei comenzi este folosită ca intrare a celei de-a doua comenzi. Al doilea awk nu funcționează dacă îl folosiți singur, dar are sens numai dacă îl direcționați la prima comandă.
  • La canalizare, nu trebuie să repetați fișierul de intrare: din acest motiv în al doilea awk nu există nicio repetare a fișierului de intrare utilizatori.txt. Dacă ești curios să folosești al doilea awk singur scrie: awk -F ']' '{print $1}' users.txt
  • Nu trebuie să redirecționați pisică ieșire către awk deoarece awk poate accepta fișiere ca intrare
  • Redirecționarea către un fișier de ieșire nu trebuie să fie în interiorul fișierului awk comandă, dar la sfârșitul comenzii complete.

Dacă doriți să vedeți rezultatele în terminal, dar nu într-un fișier, puteți elimina partea din >

Este un mod mai elegant pentru a obține datele fără a introduce două conducte awk comenzi, dar definind cele două paranteze ca delimitatori:

awk -F '[][]' '{print $2}' users.txt > users3.out

tcprks avatar
drapel za
Comanda dă rezultatul dorit. Cu toate acestea, puteți explica de ce a doua comandă de imprimare nu a imprimat nimic. awk -F '[' '{print $2}' users.txt | awk -F ']' '{print $1}' . Este ceva de genul AND. se tipărește numai dacă sunt îndeplinite ambele condiții înainte/după conductă.
Lorenz Keel avatar
drapel gr
verificați răspunsul meu editat, ar trebui să vă clarifice îndoielile.

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.