opendatasicilia / tansignari

"T'ansignari e t'appeddiri"
http://tansignari.opendatasicilia.it
Creative Commons Attribution 4.0 International
18 stars 10 forks source link

[bash] line endings #215

Closed dennisangemi closed 2 years ago

dennisangemi commented 2 years ago

Buon giorno/pomeriggio/sera/notte

Ho scritto questo script (che ho chiamato getunit.sh) per ottenere una lista con i valori unici (unique) di un campo di un dataset di ISTAT (in particolare si tratta del campo ITTER107).

#!/bin/bash

# use this script to obtain unique itter codes associated to an ISTAT dataset using iddataflow as input
# Ex. ./getunit.sh 22_289

curl -skL "https://sdmx.istat.it/SDMXWS/rest/availableconstraint/$1" |
xq . |
jq '.["message:Structure"]["message:Structures"]["structure:Constraints"]["structure:ContentConstraint"]["structure:CubeRegion"][]' |
sed 's/"true"//' |
jq '.[] | select(."@id"=="ITTER107")' |
jq '.[]' | sed 's/"ITTER107"//' | sed 's/\[//g' | sed 's/\]//g' | sed 's/,//g' | sed 's/"//g'

Lanciando ./getunit.sh 22_289 (dove 22_289 è l'id del dataflow di mio interesse) funziona tutto come previsto, ma non appena provo ad iterare l'esecuzione del comando con una lista di id di dataflow ottengo un errore che riporto di seguito.

Codice che uso per iterare

cat list.txt | while read line || [[ -n $line ]];
do
   ./getunit.sh $line > $line.txt
done

dove list.txt è una lista di id di dataflow

22_289
101_1039

L'errore ottenuto è

xq: Error running jq: ExpatError: no element found: line 1, column 0.

e VSC mi segnala uno strano simbolo nel nome del file di output corrispondente: image

Dove sbaglio? Non riesco proprio a capirlo :(

Grazie in anticipo! <3

dennisangemi commented 2 years ago

Forse conviene che io sposti questa issue qui https://github.com/ondata/guida-api-istat ?

aborruso commented 2 years ago

@dennisangemi tutto dipende dal fatto che ancora non hai la "forza" dentro, e dentro sei un peccatore utente windows.

Il ritorno a capo si esprime con dei caratteri e nel mondo win e linux il default è diverso.

Sembra che il tuo file lista, abbia un "a capo" alla win. Portalo alla Linux e tutto ti funzionerà. Lo puoi fare da tutti gli editor, o via cli con dos2unix.

Facci sapere

  dos2unix

  Change DOS-style line endings to Unix-style.
  Replaces CRLF with CR.
  More information: https://manned.org/dos2unix.

  - Change the line endings of a file:
    dos2unix filename

  - Create a copy with Unix-style line endings:
    dos2unix -n filename new_filename

image

dennisangemi commented 2 years ago

Grazie @aborruso ! Seguendo i tuoi consigli funziona tutto perfettamente. E chi me lo doveva dire che win e linux usano caratteri diversi? 😁

image

Cosa mi consigli per il titolo della ricetta? Come modificare "End of line"? È banale una ricetta di questo tipo?

aborruso commented 2 years ago

Cosa mi consigli per il titolo della ricetta? Come modificare "End of line"? È banale una ricetta di questo tipo?

Caro @dennisangemi, farei proprio questa ricetta, in tutte e due i versi, sia con una modalità CLI, sia con una visuale.

È una cosa banale, ma ci si sbatte sempre almeno una volta.

dennisangemi commented 2 years ago

Ricetta pubblicata, grazie mille @aborruso ! Chiudo