[Risolto] Modifica valore colonna file in BASH

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
vaeVictis
Imperturbabile Insigne
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

Messaggio da vaeVictis »

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.
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.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

da info sed:
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.
Ma noi non usiamo la versione GNU?

edit: infatti...

Codice: Seleziona tutto

8-) sed --version
sed (GNU sed) 4.2.2
...
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

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)
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

@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.

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! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
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

Messaggio da vaeVictis »

Non ci avevo fatto caso.
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.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

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?
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
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

Messaggio da vaeVictis »

Che cosa affascinante l'informatica...

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.txt
Al che
1) imposto le variabili

Codice: Seleziona tutto

vaevictis@vaevictis-HAL:~/Scrivania$ toremove=campo6
vaevictis@vaevictis-HAL:~/Scrivania$ toinsert=-BUMBUM-STALLMAN-
e constato che sed "in place" scapoccia e va a piangere dietro la lavagna

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'
mentre sed rediretto se la scoatta

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 
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.
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.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Il fatto è strano.
Anche per conto mio è più pratico il comando con sed.
Però la rinomina la può sempre fare all'interno dello script.
Salva l'Ucraina! 🇺🇦
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Con un milione di campi a me funziona bene anche awk

Codice: Seleziona tutto

awk '{ if ($6 == "campo6") $6="ASW"; print }' foo.txt | less
campo1 campo2 campo3 campo4 campo5 ASW campo7 campo8 campo9 c....
Ache senza "less" continua tranquillo senza andare a gallina.

Codice: Seleziona tutto

8-) awk --version
GNU Awk 4.0.1
Quindi booooooooooo?
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
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

Messaggio da vaeVictis »

Temo che si dovrebbe vedere il codice.
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.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Io, sia di awk che di sed ho le versioni trovate con la distribuzione.
Salva l'Ucraina! 🇺🇦
Avatar utente
cloudany
Prode Principiante
Messaggi: 121
Iscrizione: domenica 28 febbraio 2010, 12:54
Desktop: Unity
Distribuzione: Ubuntu

Re: [RISOLTO]Modifica valore colonna file in BASH

Messaggio da cloudany »

UbuNuovo [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?
Delle righe no delle colonne a quanto sembra si
" 4 letters are enough to explain mankind"
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Quindi il codice nuovo di VaeVictis (con redirezione su file) non ti funge?
Salva l'Ucraina! 🇺🇦
Avatar utente
cloudany
Prode Principiante
Messaggi: 121
Iscrizione: domenica 28 febbraio 2010, 12:54
Desktop: Unity
Distribuzione: Ubuntu

Re: [Risolto] Modifica valore colonna file in BASH

Messaggio da cloudany »

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"
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

Per me rimane un mistero!
PS. di awk che versione hai?

Codice: Seleziona tutto

awk --version
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
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

Messaggio da vaeVictis »

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.»
Avatar utente
UbuNuovo
Imperturbabile Insigne
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

Messaggio da UbuNuovo »

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"
Ultima modifica di UbuNuovo il domenica 22 giugno 2014, 17:00, modificato 1 volta in totale.
Salva l'Ucraina! 🇺🇦
Avatar utente
cloudany
Prode Principiante
Messaggi: 121
Iscrizione: domenica 28 febbraio 2010, 12:54
Desktop: Unity
Distribuzione: Ubuntu

Re: [Risolto] Modifica valore colonna file in BASH

Messaggio da cloudany »

No no sono file .ped, per la genetica ma sono file di testo con una formattazione a tabulazione.
" 4 letters are enough to explain mankind"
Avatar utente
vaeVictis
Imperturbabile Insigne
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

Messaggio da vaeVictis »

Mi posti l'output del comando file per cortesia?

Codice: Seleziona tutto

file percorso_del_file
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.»
Avatar utente
cloudany
Prode Principiante
Messaggi: 121
Iscrizione: domenica 28 febbraio 2010, 12:54
Desktop: Unity
Distribuzione: Ubuntu

Re: [Risolto] Modifica valore colonna file in BASH

Messaggio da cloudany »

Codice: Seleziona tutto

ASCII text
" 4 letters are enough to explain mankind"
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti