[Risolto] Modifica valore colonna file in BASH
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [RISOLTO]Modifica valore colonna file in BASH
Sì, in effetti dovrebbe essere il motivo.
Non sono un grande spulciatore di documentazioni, ma credo che da qualche parte siano indicate le limitazioni di sed a riguardo.
Non sono un grande spulciatore di documentazioni, ma credo che da qualche parte siano indicate le limitazioni di sed a riguardo.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [RISOLTO]Modifica valore colonna file in BASH
da info sed:
edit: infatti...
Ma noi non usiamo la versione GNU?5 GNU `sed''s Limitations and Non-limitations
*********************************************
For those who want to write portable `sed' scripts, be aware that some
implementations have been known to limit line lengths (for the pattern
and hold spaces) to be no more than 4000 bytes. The POSIX standard
specifies that conforming `sed' implementations shall support at least
8192 byte line lengths. GNU `sed' has no built-in limit on line length;
as long as it can `malloc()' more (virtual) memory, you can feed or
construct lines as long as you like.
However, recursion is used to handle subpatterns and indefinite
repetition. This means that the available stack space may limit the
size of the buffer that can be processed by certain patterns.
edit: infatti...
Codice: Seleziona tutto
8-) sed --version
sed (GNU sed) 4.2.2
...Salva l'Ucraina! 
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [RISOLTO]Modifica valore colonna file in BASH
In questa pagina si parla dei limiti di awk per quanto riguarda il numero di colonne in base alla versione (awk, gawk...), però la pagina a cui rimanda il post non esiste! In altri post si parla di circa 32Kb max per awk mentre per gawk non dovrebbero esserci limiti.
Sul mio pc esguendo "awk" in realtà utilizzo "gawk" (link simbolico)
Sul mio pc esguendo "awk" in realtà utilizzo "gawk" (link simbolico)
Salva l'Ucraina! 
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [RISOLTO]Modifica valore colonna file in BASH
@VaeVictis non ci siamo accorti che il comando sed tronca il testo dopo la sostituzione...
Si vede anche nel tuo esempio post
Potrebbe essere la causa dell'errore! Hai voglia di dargli un'occhiata?
edit:
Cioè non lo tronca ma riscrive il campo precedente.
Si vede anche nel tuo esempio post
Potrebbe essere la causa dell'errore! Hai voglia di dargli un'occhiata?
edit:
Cioè non lo tronca ma riscrive il campo precedente.
Codice: Seleziona tutto
8-) echo "1234 1234 1234 1234 lkhjg -9 campo7 campo8" | sed -r 's/^(([^ \t]* ){5})'"$toremove"' (.*)$/\1'"$toinsert"' \2/'
1234 1234 1234 1234 lkhjg -BUMBUM-STALLMAN lkhjg Salva l'Ucraina! 
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [RISOLTO]Modifica valore colonna file in BASH
Non ci avevo fatto caso.
Mi sa che è per via della doppia parentesi.
Prova un po' così:
Mi sa che è per via della doppia parentesi.
Prova un po' così:
Codice: Seleziona tutto
vaevictis@vaevictis-HAL:~$ echo "campo1 campo2 campo3 campo4 campo5 -9 campo7 campo8 campo9" | sed -r 's/^(([^ \t]* ){5})'"$toremove"'(.*)$/\1'"$toinsert"'\3/'
campo1 campo2 campo3 campo4 campo5 -BUMBUM-STALLMAN- campo7 campo8 campo9
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [RISOLTO]Modifica valore colonna file in BASH
Così sembra ok!
@cloudany
Sarebbe bene, quando puoi, che provassi il codice, se funziona, per te è un'operazione meno macchinosa e noi ci leviamo una curiosità: sed ha limiti di lunghezza delle righe?
@cloudany
Sarebbe bene, quando puoi, che provassi il codice, se funziona, per te è un'operazione meno macchinosa e noi ci leviamo una curiosità: sed ha limiti di lunghezza delle righe?
Salva l'Ucraina! 
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [RISOLTO]Modifica valore colonna file in BASH
Che cosa affascinante l'informatica...
Direi che un milione di campi può essere un buon compromesso, quindi:
Al che
1) imposto le variabili
e constato che sed "in place" scapoccia e va a piangere dietro la lavagna
mentre sed rediretto se la scoatta
Ora... da un punto di vista di "performance" questa soluzione dovrebbe essere la "migliore".
Quindi io userei la redirezione, poi a manina cancellerei il file iniziale e rinominerei l'altro.
Direi che un milione di campi può essere un buon compromesso, quindi:
Codice: Seleziona tutto
vaevictis@vaevictis-HAL:~/Scrivania$ for i in `seq 1 1000000`; do echo -n "campo$i "; done >> foo.txt1) imposto le variabili
Codice: Seleziona tutto
vaevictis@vaevictis-HAL:~/Scrivania$ toremove=campo6
vaevictis@vaevictis-HAL:~/Scrivania$ toinsert=-BUMBUM-STALLMAN-Codice: Seleziona tutto
vaevictis@vaevictis-HAL:~/Scrivania$ sed -ir 's/^(([^ \t]* ){5})'"$toremove"'(.*)$/\1'"$toinsert"'\3/' foo.txt
sed: espressione -e #1, carattere 52: riferimento non valido \3 nel secondo membro del comando `s'Codice: Seleziona tutto
vaevictis@vaevictis-HAL:~/Scrivania$ sed -r 's/^(([^ \t]* ){5})'"$toremove"'(.*)$/\1'"$toinsert"'\3/' foo.txt > bar.txt
vaevictis@vaevictis-HAL:~/Scrivania$ grep -oE "^.*campo8 " bar.txt
campo1 campo2 campo3 campo4 campo5 -BUMBUM-STALLMAN- campo7 campo8
Quindi io userei la redirezione, poi a manina cancellerei il file iniziale e rinominerei l'altro.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [RISOLTO]Modifica valore colonna file in BASH
Il fatto è strano.
Anche per conto mio è più pratico il comando con sed.
Però la rinomina la può sempre fare all'interno dello script.
Anche per conto mio è più pratico il comando con sed.
Però la rinomina la può sempre fare all'interno dello script.
Salva l'Ucraina! 
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [RISOLTO]Modifica valore colonna file in BASH
Con un milione di campi a me funziona bene anche awk
Ache senza "less" continua tranquillo senza andare a gallina.
Quindi booooooooooo?
Codice: Seleziona tutto
awk '{ if ($6 == "campo6") $6="ASW"; print }' foo.txt | less
campo1 campo2 campo3 campo4 campo5 ASW campo7 campo8 campo9 c....Codice: Seleziona tutto
8-) awk --version
GNU Awk 4.0.1Salva l'Ucraina! 
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [RISOLTO]Modifica valore colonna file in BASH
Temo che si dovrebbe vedere il codice.
E le varie opzioni di compilazione dei programmi.
Roba hard!
E le varie opzioni di compilazione dei programmi.
Roba hard!
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [RISOLTO]Modifica valore colonna file in BASH
Io, sia di awk che di sed ho le versioni trovate con la distribuzione.
Salva l'Ucraina! 
- cloudany
- Prode Principiante
- Messaggi: 121
- Iscrizione: domenica 28 febbraio 2010, 12:54
- Desktop: Unity
- Distribuzione: Ubuntu
Re: [RISOLTO]Modifica valore colonna file in BASH
Delle righe no delle colonne a quanto sembra siUbuNuovo [url=http://forum.ubuntu-it.org/viewtopic.php?p=4603960#p4603960][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Così sembra ok!
@cloudany
Sarebbe bene, quando puoi, che provassi il codice, se funziona, per te è un'operazione meno macchinosa e noi ci leviamo una curiosità: sed ha limiti di lunghezza delle righe?
" 4 letters are enough to explain mankind"
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Modifica valore colonna file in BASH
Quindi il codice nuovo di VaeVictis (con redirezione su file) non ti funge?
Salva l'Ucraina! 
- cloudany
- Prode Principiante
- Messaggi: 121
- Iscrizione: domenica 28 febbraio 2010, 12:54
- Desktop: Unity
- Distribuzione: Ubuntu
Re: [Risolto] Modifica valore colonna file in BASH
No non va, l'ho provatoe siamo sempre lì mentre la tua idea del "divide et impera" ha funzionato, almeno ha raggirato il problema della mole di dati.
" 4 letters are enough to explain mankind"
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Modifica valore colonna file in BASH
Per me rimane un mistero!
PS. di awk che versione hai?
PS. di awk che versione hai?
Codice: Seleziona tutto
awk --versionSalva l'Ucraina! 
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [Risolto] Modifica valore colonna file in BASH
Ma non è che son file "dos" eh?!
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- UbuNuovo
- Imperturbabile Insigne

- Messaggi: 4457
- Iscrizione: sabato 12 dicembre 2009, 20:58
- Desktop: Mate
- Distribuzione: Ubuntu Mate 22.04.1 LTS
- Sesso: Maschile
- Contatti:
Re: [Risolto] Modifica valore colonna file in BASH
Ci pensavo ieri...può essere. Con 'type' o 'cat -v' ci potrebbe levare la curiosità.
Seguo la discussione ma non intervengo devo finire una csa che avrei dovuto finire ieri.
Edit: "file" non "type"
Seguo la discussione ma non intervengo devo finire una csa che avrei dovuto finire ieri.
Edit: "file" non "type"
Ultima modifica di UbuNuovo il domenica 22 giugno 2014, 17:00, modificato 1 volta in totale.
Salva l'Ucraina! 
- cloudany
- Prode Principiante
- Messaggi: 121
- Iscrizione: domenica 28 febbraio 2010, 12:54
- Desktop: Unity
- Distribuzione: Ubuntu
Re: [Risolto] Modifica valore colonna file in BASH
No no sono file .ped, per la genetica ma sono file di testo con una formattazione a tabulazione.vaeVictis [url=http://forum.ubuntu-it.org/viewtopic.php?p=4604204#p4604204][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Ma non è che son file "dos" eh?!
" 4 letters are enough to explain mankind"
- vaeVictis
- Imperturbabile Insigne

- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: [Risolto] Modifica valore colonna file in BASH
Mi posti l'output del comando file per cortesia?
Codice: Seleziona tutto
file percorso_del_filePirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- cloudany
- Prode Principiante
- Messaggi: 121
- Iscrizione: domenica 28 febbraio 2010, 12:54
- Desktop: Unity
- Distribuzione: Ubuntu
Re: [Risolto] Modifica valore colonna file in BASH
Codice: Seleziona tutto
ASCII text" 4 letters are enough to explain mankind"
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti