Permalänk
Medlem

unterminated string med awk

Jag har en fil som endast innehåller ett kort stycke html-kod, och en fil innehållandes en lista med emailadresser.

Jag ska ta denna html-kod och lägga som prefix på varje rad, så att den står före varje emailadress.

prefix1=$(cat in1.txt) awk -v prefix1=$prefix1 '{print prefix1 $0}' fil1 > fil2

html-koden i filen är:
<a href="mailto:

Får följande fel:
$ bash skript.sh

awk: href="mailto: awk: ^ unterminated string

Hur fixar jag detta?

Visa signatur

💻 ROG Maximus XI Hero | i9 9900K | Corsair H115i | Samsung 960 PRO 512GB M.2 | Samsung 970 PRO 1TB M.2 | GTX 1080Ti FTW3 | Corsair 32GB (2x16GB) DDR4 3200MHz | EVGA Supernova G2 750W
📺 Dell Alienware AW2723DF 1440p 280 Hz | Acer XB271HU 1440p 165Hz
🎧 Schiit stack: Magni 3+ AMP | Modi 3 DAC | Sennheiser HD600 | HD800

Permalänk
Medlem

awk får problem med strängen för den letar efter en till dubbelfnutt. Nu är jag osäker men troligtvis vill den skanna av substrängen ifall den innehåller variabler.

Nu är jag ingen mästare på awk så jag använde mig av sed istället:

$ cat mails.txt brod@mail.mail korv@mail.mail senap@mail.mail

$ cat mails.txt | sed -r 's/^.+$/\<a href\=\"mailto\:&/g' <a href="mailto:brod@mail.mail <a href="mailto:korv@mail.mail <a href="mailto:senap@mail.mail

Dock antar jag att du även vill avsluta taggen vilket kan göras i samma kommando, t.ex.:

cat mails.txt | sed -r 's/^.+$/\<a href\=\"mailto\:&\"\>MAILA MIG!\<\/a\>/g' <a href="mailto:brod@mail.mail">MAILA MIG!</a> <a href="mailto:korv@mail.mail">MAILA MIG!</a> <a href="mailto:senap@mail.mail">MAILA MIG!</a>

Ifall du ska generera en massa HTML (d.v.s. detta var bara ett exempel av vad du ska göra) skulle jag nog rekommendera ett skriptspråk som förenklar strängmanipulering en hel del, t.ex. Perl eller Python, alternativt ett språk med ramverk avsätt för webbpublicering.

Visa signatur

Efter att ni har läst det här har ni insett att det inte gav något.

Permalänk
Hedersmedlem
Skrivet av Asce:

prefix1=$(cat in1.txt) awk -v prefix1=$prefix1 '{print prefix1 $0}' fil1 > fil2

Du måste lägga citationstecken runt $prefix1 när du vill använda det i skalet där; annars så säger du i praktiken något i stil med:

awk -v prefix1=<a href="mailto: '{print prefix1 $0}' fil1 > fil2

Då försöker du sätta AWK-variabeln prefix1 till <a och sedan köra AWK-kommandot href="mailto: på filerna {print prefix1 $0} och fil1. Inte så lyckat.

Illustrerat:

$ prefix1="foo" $ printf 'rad 1\nrad 2\n' | awk -v prefix1=$prefix1 '{print prefix1 $0}' foorad 1 foorad 2 $ prefix1="foo bar" $ printf 'rad 1\nrad 2\n' | awk -v prefix1=$prefix1 '{print prefix1 $0}' awk: fatal: cannot open file `{print prefix1 $0}' for reading (No such file or directory) $ printf 'rad 1\nrad 2\n' | awk -v prefix1="$prefix1" '{print prefix1 $0}' foo barrad 1 foo barrad 2

Därtill så kan man som regel säga att när cat används i ett skript så görs det felaktigt/i onödan . Ska du bara läsa en rad som här så är det enklare att köra:

read prefix1 < in1.txt

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.