Page 3 of 3

Re: [CS] Introduction to UNIX

Posted: Sun Sep 30, 2012 10:16 pm
by timvdm
TaaiePop wrote:Kan iemand me a.u.b. op weg helpen met blok 4, vragen l & m? Ik vind de antwoorden maar niet :(
(l) Store all names that are both male and female names in unisex-names.

Je hebt dus all-names van daarvoor. Nu moet je alle gedupliceerde namen naar unisex-names schrijven. Dus eigenlijk is dit hetzelfde als (k) maar dan met een redirect... In het geval dat je (k) ook niet hebt, gebruik dan "uniq" om de gedupliceerde namen te printen (zoek "only print duplicate lines" in man uniq)

(m) Remove duplicate names from all-names.

Dit is eigenlijk hetzelfde maar deze keer moet je niet de gedupliceercde maar unieke names redirecten naar een file. Gebruik dus "uniq" zonder het argument van (l) dat je gebruikte om enkel gedupliceerde names te krijgen.

Re: [CS] Introduction to UNIX

Posted: Mon Oct 01, 2012 1:55 am
by Axelle
Had hetzelfde probleem bij m, ik snap het principe wel maar ik krijg het niet in dezelfde file. Of mag je het gewoon in een andere file zetten?

Re: [CS] Introduction to UNIX

Posted: Mon Oct 01, 2012 10:58 am
by Disparv
gwn de output van 'uniq' redirecten met '>'

Re: [CS] Introduction to UNIX

Posted: Mon Oct 01, 2012 11:21 am
by timvdm
Axelle wrote:Had hetzelfde probleem bij m, ik snap het principe wel maar ik krijg het niet in dezelfde file. Of mag je het gewoon in een andere file zetten?
Ik heb dit gebruikt:

Code: Select all

cat all-names | uniq > all-names

Re: [CS] Introduction to UNIX

Posted: Mon Oct 01, 2012 11:45 am
by timvdm
timvdm wrote:
Axelle wrote:Had hetzelfde probleem bij m, ik snap het principe wel maar ik krijg het niet in dezelfde file. Of mag je het gewoon in een andere file zetten?
Ik heb dit gebruikt:

Code: Select all

cat all-names | uniq > all-names
Sorry, het moet eigenlijk dit zijn vermits je niet direct naar hetzelfde file kunt redirecten:

Code: Select all


cat all-names | uniq > all-names-tmp
mv all-names-tmp all-names

Re: [CS] Introduction to UNIX

Posted: Mon Oct 01, 2012 4:56 pm
by Chrizzle
timvdm wrote:
timvdm wrote:
Axelle wrote:Had hetzelfde probleem bij m, ik snap het principe wel maar ik krijg het niet in dezelfde file. Of mag je het gewoon in een andere file zetten?
Ik heb dit gebruikt:

Code: Select all

cat all-names | uniq > all-names
Sorry, het moet eigenlijk dit zijn vermits je niet direct naar hetzelfde file kunt redirecten:

Code: Select all


cat all-names | uniq > all-names-tmp
mv all-names-tmp all-names
En als ge creatief gebruik maakt van && kunde da zelfs in een lijn steken

Code: Select all


cat all-names | sort | uniq > all-names.tmp && mv all-names.tmp all-names && rm all-names.tmp
Btw, ge moet ook sort'en denk ik .. uniq verwijdert enkel opeenvolgende duplicate entries, could be wrong though ...

Re: [CS] Introduction to UNIX

Posted: Mon Oct 01, 2012 6:09 pm
by timvdm
Chrizzle wrote:
timvdm wrote:
timvdm wrote:
Axelle wrote:Had hetzelfde probleem bij m, ik snap het principe wel maar ik krijg het niet in dezelfde file. Of mag je het gewoon in een andere file zetten?
Ik heb dit gebruikt:

Code: Select all

cat all-names | uniq > all-names
Sorry, het moet eigenlijk dit zijn vermits je niet direct naar hetzelfde file kunt redirecten:

Code: Select all


cat all-names | uniq > all-names-tmp
mv all-names-tmp all-names
En als ge creatief gebruik maakt van && kunde da zelfs in een lijn steken

Code: Select all


cat all-names | sort | uniq > all-names.tmp && mv all-names.tmp all-names && rm all-names.tmp
Btw, ge moet ook sort'en denk ik .. uniq verwijdert enkel opeenvolgende duplicate entries, could be wrong though ...
Dat klopt (uniq verwijderd enkel adjacent duplicated items), maar in opgave (j) sorteren we all-names dus dit is geen probleem.

En je kan '&&' ook vervangen door ';', is minder typen :P

Je laatste commando is wel overbodig vermits je all-names.tmp moved naar all-names kan je all-names.tmp niet meer verwijderen.

Maar toch bedankt om ons te helpen en ik maak ook vaak van die kleine foutjes met snel te willen zijn :)

Re: [CS] Introduction to UNIX

Posted: Tue Oct 02, 2012 11:14 am
by Robbe
even wat tips om de commandlines wat korter te maken:

Code: Select all

cat blah | [grep|sed|cut|...] "..." -> [grep|sed|cut|...] "..." blah
sort | uniq -> sort -u
als je zeker geen probleem wil hebben met nameclashing: mktemp

Code: Select all

#!/bin/bash
TIJDELIJK="$(mktemp)"
sort -u blabla > $TIJDELIJK
mv $TIJDELIJK blabla
less pipes is more ;)

bron: de manpages (en/of texinfos) van grep, sed, cut, mktemp, sort...