Puncte:1

Variabilele awk $1 și $2 apar goale

drapel ph

OBIECTIV: comparați dimensiunea structurii noastre de directoare zi peste zi. Dosarul de date are peste 990 tb în el, așa că a trebuit să rulez o grămadă de du-uri paralele pentru ca acesta să se termine într-un timp rezonabil. Ocazional, vedem o creștere mare a datelor foarte rapid și în prezent nu avem o modalitate bună de a vedea unde au fost adăugate datele.

PROBLEMA: $1 și $2 din awk-ul meu nu ies nimic și nici ghilimelele simple care ar trebui să le înconjoare nu apar.

GRĂVĂ PREEMPTIVĂ: Știu că există instrumente MULT mai bune pentru a găsi aceste informații și lucrăm la implementarea lor. Acesta este menit să fie un leucoaniu rapid și murdar pentru a ne permite să rezolvăm orice creștere rapidă care are loc până când software-ul de monitorizare adecvat este în vigoare. De asemenea, delimitatorul dintre cele două valori din fișierul jurnal este o filă. Lipirea acestuia în acest editor WYSIWYG a convertit fila în spații.

Vă mulțumesc anticipat pentru orice ajutor pe care mi-l puteți oferi!

Snarf


Încerc să fac următoarele (pseudocod)

  • Găsiți foldere la două niveluri adâncime în folderul nostru de date
  • Creați o structură de directoare într-un folder temporar care oglindește structura folderului de date
  • Creați fișiere jurnal în structura folderelor temporare pentru fiecare dintre folderele găsite în „găsi foldere”
  • Completați acele fișiere jurnal cu ieșirea unui du --uri ale folderelor din „găsiți foldere”
  • awk fișierele jurnal și construiți inserții sql
  • odată ce inserările sql arată corect, voi trimite awk către mysql
  • odată ce datele există în mysql, va fi ușor să interogați statisticile zilnice

Script -

DT=`data +"%Y%m%d"`
BASE=/mnt/data/test/

găsiți /mnt/data -maxdepth 2 -mindepth 2 -type d -exec sh -c 'mkdir -p "$(dirname '"$BASE$DT"'{}.log)";atingeți '"$BASE$DT" '{}.Buturuga; du -S {} > '"$BASE$DT"'{}.log; awk -F'\''\t'\'' '\''{printează „INSERT INTO DATE'"$DT"'(dimensiune_dosar, locație_dosar) VALUES('\''$1'\'', '\'' $2'\'');"}'\'' '"$BASE$DT"'{}.log' \;

Exemplu de fișier jurnal -

0 /mnt/data/apps/bog/minio.production-config/.minio/certs/CAs
12 /mnt/data/apps/bog/minio.production-config/.minio/certs
1 /mnt/data/apps/bog/minio.production-config/.minio
1 /mnt/data/apps/bog/minio.production-config

Exemplu de ieșire din scriptul pentru acest fișier jurnal -

INSERT INTO DATE20220508(dimensiunea_dosarului, locația_dosarului) VALUES(, );
INSERT INTO DATE20220508(dimensiunea_dosarului, locația_dosarului) VALUES(, );
INSERT INTO DATE20220508(dimensiunea_dosarului, locația_dosarului) VALUES(, );
INSERT INTO DATE20220508(dimensiunea_dosarului, locația_dosarului) VALUES(, );
drapel in
Este cu adevărat necesar să numărăm dimensiunile fișierelor? Nu este suficient să monitorizezi doar utilizarea discului?
Puncte:1
drapel bd

Ești adânc în a cita iadul acolo.

Ta găsi comanda trece la sh -c un argument de genul

mkdir -p "$(dirname /mnt/data/test/20220508/mnt/data/abc/def.log)"; atingeți /mnt/data/test/20220508/mnt/data/abc/def.log; du -S /mnt/data/abc/def > /mnt/data/test/20220508/mnt/data/abc/def.log; awk -F'\t' '{printează „INSERT INTO DATE20220508(folder_size, folder_location) VALUES('$1', '$2');"}' /mnt/data/test/20220508/mnt/data/abc/def. Buturuga

Acum SH analizează acest lucru, eliminând un nivel de citare. Se extinde $(dirname /mnt/data/test/20220508/mnt/data/abc/def.log) la /mnt/data/test/20220508/mnt/data/abc, și variabilele $1 și $2 în awk pentru a goli șiruri de caractere (din moment ce nu a primit niciun parametru de poziție), dând

mkdir -p /mnt/data/test/20220508/mnt/data/abc; atingeți /mnt/data/test/20220508/mnt/data/abc/def.log; du -S /mnt/data/abc/def > /mnt/data/test/20220508/mnt/data/abc/def.log; awk -F\t '{printează "INSERT INTO DATE20220508(folder_size, folder_location) VALUES(, );"}' /mnt/data/test/20220508/mnt/data/abc/def.log

(Am reinserat ghilimele simple în jurul lui awk Argumentul text al programului pentru claritate.)

Cea mai ușoară cale de ieșire este să creați un fișier pentru awk program la care apoi treceți awk prin intermediul -f opțiune. Apoi, aș recomanda și să faceți sarcina FS = „\t” în acel fișier în loc să utilizați -F opțiune.

În cele din urmă, dacă nu mai aveți nicio utilizare pentru fișierele jurnal, cu excepția creării instrucțiunilor SQL, vă puteți simplifica considerabil scriptul prin canalizarea ieșirii du direct către awk, cum ar fi:

DT=`data +"%Y%m%d"`

find /mnt/data -maxdepth 2 -mindepth 2 -type d -exec sh -c 'du -S {} | awk -v DT='$DT' -f /mnt/data/makeinserts.awk' \;

cu dosarul /mnt/data/makeinserts.awk conţinând purul awk program:

ÎNCEPE{FS="\t"}
{printați „INSERT INTO DATE”DT”(dimensiune_dosar, locație_dosar) VALUES('"$1"', '"$2"');"}

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.