Puncte:0

grep data din a doua linie a unui fișier text

drapel ng

Am un fișier text numit (document_determinationv1.txt). Acest fișier text conține două rânduri care sunt menționate mai jos. Vreau să obțin data (20210805) din a doua linie și vreau să o stochez într-o variabilă folosind comenzi de script shell. Sunt nou pe Linux. Mulțumesc anticipat.

[DOCUMENT_DETERMINATION]
#REVISION:v1;DATA:20210805
drapel ng
[DOCUMENT_DETERMINATION]
Puncte:2
drapel cn

Ca întotdeauna, există mai multe moduri de a face acest lucru, în funcție de cerințele exacte.

Fiind una dintre cele mai simple moduri, puteți face:

AVARIABLE=$(sed -ne 's/.*DATE://p' document_determinationv1.txt)

Asta chiar nu-i pasă care linia la care este data. Acesta va funcționa atâta timp cât fișierul dvs. conține exact o linie care conține cuvântul cheie DATE urmat de două puncte și data pe care doriți să o extrageți. De asemenea, nu va verifica dacă DATE apare ca un cuvânt propriu, dacă partea de după DATA: este de fapt o dată sau dacă este urmată de vreun nedorit suplimentar. Dacă fișierul dvs. conține mai mult de o linie care conține DATA urmată de două puncte, atunci va pune toate părțile după fiecare DATĂ: în variabilă, separate prin linii noi, ceea ce poate sau nu produce ravagii în procesarea dvs. ulterioară. Deci, dacă fișierul dvs. conține, de exemplu:

[DOCUMENT_DETERMINATION]
#REVISION:v1;DATA:20210805;GREUTATE:123kg
[REAL_DETERMINATION]
#PRIME:13;CANDIDAT:BART SIMPSON

atunci comanda va pune bucuros

20210805;GREUTATE:123kg
BART SIMPSON

în variabilă, inclusiv linia nouă dintre literele g și B.

Dar atâta timp cât puteți garanta că fișierul are exact formatul pe care l-ați citat în întrebarea dvs., va funcționa bine.

drapel hr
Desigur, puteți face cu ușurință să vă îngrijească pe ce linie se află - schimbând `s` în `2s`, de exemplu
drapel ng
A funcționat cu această comandă ceea ce ați furnizat. Mulțumesc mult.
Puncte:0
drapel gb

Ai putea face următoarele:

fișier pisică.txt | sed "2q;d" | awk -F: „{printează $3}”
  • pisică imprimă conținutul fișierului într-o conductă
  • sed ia această conductă și scoate a doua linie
  • care awk ia, se împarte prin două puncte și în cele din urmă tipărește al treilea argument

Puteți încerca fiecare comandă separat. Și dacă doriți să stocați toate lucrurile într-o variabilă, utilizați $(comandă) sintaxă:

VAR=$(cat fișier.txt | sed „2q;d” | awk -F: „{print $3}”)

Și imprimați rezultatul:

eco $VAR
drapel hr
Nu aveți nevoie de `cat` și nu aveți nevoie de sed dacă folosiți `NR` a awk pentru a alege linia ex. `awk -F'[;:]' 'NR==2 {printați $4}' document_determinationv1.txt`

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.