Sziasztok!
Nem vagyok awk guru, de biztos vagyok benne, hogy egy egyszerű dolgot kérdezek.
Van egy nsradmin által legeneralt, de nem szűrt listám amit szűrnöm kéne, ez így néz ki(pár dolgot kicsillagoztam):
type: NSR client;
name: ********;
server: ********;
client id: \
265336ad-00000004-53285da9-532c68c0-3db5000b-5de54d4e;
scheduled backup: Enabled;
comment: ;
Save operations: ;
archive services: Disabled;
schedule: Full on Sunday;
browse policy: month;
retention policy: month;
statistics: elapsed = 583639, index size (KB) = 37657,
amount used (KB) = 37657, entries = 238603;
directive: ;
group: Production;
save set: All;
Backup renamed directories: Enabled;
Checkpoint enabled: Disabled;
Checkpoint granularity: Directory;
priority: 500;
File inactivity threshold: 0;
File inactivity alert threshold: 0;
remote access: ;
remote user: ;
password: ;
backup command: ;
application information: ;
ndmp: No;
NDMP array name: ;
De-duplication backup: No;
De-duplication node: ;
Pool: ;
Data Domain backup: No;
Client direct: Enabled;
Probe resource name: ;
virtual client: No;
physical host: ;
Proxy backup type: ;
Proxy backup host: ;
executable path: ;
server network interface: ;
aliases: ********************;
index path: ;
owner notification: ;
parallelism: 4;
physical client parallelism: Disabled;
storage nodes: nsrserverhost;
recover storage nodes: ;
hard links: Disabled;
short filenames: Disabled;
BMR: Disabled;
BMR options: ;
backup type: ;
client OS type: Linux;
CPUs: 2;
NetWorker version: 7.6.4.2.Build.1060;
enabler in use: Yes;
licensed applications: ;
licensed PSPs: ;;
A tartalma több mint 65ezer sor. Ebből szeretnék egy listát ahol az OS type: Linux v Solaris, ami a következőképpen nézne ki:
name group parallelism Networker Version
Tehát a name helyén a host neve és így tovább.
Elkezdtem awk-val...hm...bohóckodni, de nem jutottam messzire.
(nincs rá módom, hogy újra legeneráljam a listát a networkerből)
Még a félmegoldásokat is szívesen fogadom, amiből el tudok indulni.
- 3659 megtekintés
Hozzászólások
én a te helyedben egy táblázatot készítenék. pl minden 20 sornál lenne csak soremelés egyébként pedig a \n karaktert törölném.
ha megvan hogy az adott értékek egy sorban vannak akkor utána már gyerekjáték.
egy kis segítség:
http://www.thegeekstuff.com/2010/01/8-powerful-awk-built-in-variables-f…
--
A legértékesebb idő a pillanat amelyben élsz.
https://sites.google.com/site/jupiter2005ster/
- A hozzászóláshoz be kell jelentkezni
awk -F': *|;' '$1~/^(name|group|parallelism|NetWorker version)$/ { output = (output ? output " " $2 : $2) }; $1~/^(client OS type)$/ { os=$2}; $1 == "NetWorker version" && os ~ /^(Linux|Solaris)/ { print output; output=""}' input
icipicit rövidebben, és talán elegánsabban:
awk -F': *|;' '/^type/,/^NetWorker version/ { a[$1] = $2; if ($1 == "NetWorker version" && a["client OS type"] ~ /^(Linux|Solaris)/) {print a["name"], a["group"], a["parallelism"], a["NetWorker version"]}}' input
- A hozzászóláshoz be kell jelentkezni
A -F utáni stringet elmagyaráznád pár szóban? (egyszerű regexp lenne?)
- A hozzászóláshoz be kell jelentkezni
Kettőspont utána bárhány - akár nulla - szóközzel vagy pontosvessző mezőelválasztó.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Szóval regexp :)
Csak azért kérdeztem, mert az az awk, amit legutóbb használtam, csak fix karaktereket engedett szeparátorként.
Olyat lehet awk esetén, hogy a RS (rekord szeparátor) ';;' legyen a newline helyett?
Ha jól tippelek, itt ez a helyzet.
- A hozzászóláshoz be kell jelentkezni
If RS is any single character, that character separates records. Otherwise, RS is a regular expression.
Ebből nekem úgy tűnik, hogy lehet.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Kösz, közben győztem a lustaság felett és előszedtem a gépemet. (mostanában leginkább mobilról netezek, ott meg macerás néha még a keresés is - főleg, mert nincs adblock és ismeretlen oldalakon hihetetlen ocsmány reklámok tolakodnak a képembe... :( )
- A hozzászóláshoz be kell jelentkezni
Így van. További mnemonikként egy kis indirekt elismerés ezzel kapcsolatban a nagytesó dokjában (man perlvar):
"$INPUT_RECORD_SEPARATOR
$RS
$/ The input record separator, newline by default.
...
Remember: the value of $/ is a string, not a regex. awk has to be better for something. :-)"
(Bár most itt egy kicsit összekeveredett az FS és az RS taglalása.)
- A hozzászóláshoz be kell jelentkezni