Vraag Hoe voorkom je dat een tekst voorkomt?


Ik zou graag willen converteren

blue blue red green

naar:

color.1=blue color.2=blue color.3=red color.4=green

Eventuele aanwijzingen over hoe dit aan te pakken? sed, awk, etc.?


3
2018-03-27 18:02


oorsprong




antwoorden:


In Bash:

colors="blue blue red green"
i=1
for c in $colors; do
    echo -n "color.$((i++))=$c "
done

Commandoregelversie (eenvoudig te kopiëren en plakken naar terminal) met 2 regels - eerst instellingsvariabelen en vervolgens hoofdscript:

colors="blue blue red green"; i=1
for c in $colors; do echo -n "color.$((i++))=$c "; done

8
2018-03-27 18:05





Hier is een Python-manier:

#!/usr/bin/env python2
input_string = 'blue blue red green'
count = 1
for value in input_string.split():
    print 'color.{0}={1}'.format(count, value),
    count += 1

Output:  color.1=blue color.2=blue color.3=red color.4=green

Hier is een sed manier:

$ n=1;x=color;echo "blue blue red green" | sed -rn "s/^([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)$/$x\.$n=\1 $x\.$((n+1))=\2 $x\.$((n+2))=\3 $x\.$((n+3))=\4/p" 

Output:  color.1=blue color.2=blue color.3=red color.4=green

Hier hebben we de variabele gebruikt n opslaan 1 en x om de string op te slaan color, gebruikten vervolgens de groepering en backreferencing om het gewenste resultaat te krijgen.


4
2018-03-27 18:13



Bedankt voor de alternatieve pythonmanier, nu gebruik ik gewoon bash, dus ik zal het antwoord van madneon gebruiken, je antwoord wordt gewaardeerd, proost! - TuxForLife
@ user264974: zeker, voel je vrij .. :) - heemayl
@ user264974: bekijk de nieuw toegevoegde sed manier (als dat helpt) .. - heemayl


Hier is  oplossing als uw kleuren zo meer zijn:

awk '{ printf("color.%d=%s ",NR, $0 ) }' RS='[[:blank:]]+' infile
color.1=blue color.2=blue color.3=red color.4=green

RS definieert Spaties / Tabs als RECORD Separator met voorvallen van één of meerdere keren +. Dan de printf commando print de stroom Nomber van Record / field en volgende print het hele record / veld $0 van in bestand als invoerbestand.


3
2018-03-27 19:02