|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
[c shell] comando sed
ciao ragazzi, un aiutino per una questione da risolvere con uno script...
mi si chiede di contare le righe di due file, file1 e file2 ed eliminare le righe in eccesso in modo che i due file abbiano lo stesso numero di righe. Ho realizzato una piccola funzione CONTELIMRIGHE.lib che: -calcola il numero di righe del primo file -calcola il numero di righe del secondo file -calcola la differenza di righe del primo e del secondo file -elimina le righe da 1 a diff di file1 Il problema è proprio nell'ultima istruzione, perchè quando vado ad eseguire nel mio script questa funzione, dopo il calcolo esatto di diff, ottengo questo error: sed: -e expression #1, char 6: extra characters after command cioè la notazione con 1,${diff}d non me l'accetta. Codice:
CONTELIMRIGHE()
{
riga1=`wc -l file1 | awk '{print $1}'`
riga2=`wc -l file2 | awk '{print $1}'`
echo "RIGHE file1 ---> $riga1"
echo "RIGHE file2 ---> $riga2"
diff=`expr $riga1 - $riga2`
echo "Differenza di righe tra i due file ---> $diff"
sed '1,${diff}d' file1
}
Grazie ... |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Hai usato virgolette singole, temo non faccia l'espansione in quel modo.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
|
Codice:
CONTELIMRIGHE()
{
riga1=$(wc -l file1 | awk '{print $1}')
riga2=$(wc -l file2 | awk '{print $1}')
echo "RIGHE file1 ---> $riga1"
echo "RIGHE file2 ---> $riga2"
diff=$(expr $riga1 - $riga2)
echo "Differenza di righe tra i due file ---> $diff"
sed '1,${diff}d' file1
}
Codice:
awk -v m_diff="$diff" 'NR > m_diff { print $0 }' > file 1
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
Il problema non è contare le righe dei due file...perchè lo faccio con wc -l | awk per ottenere il numero; sed lo uso per eliminare le righe, cosa che m pare s possa fare.
Ora poichè devo cancellare le righe che vanno da 1 a diff, il cui valore è dato dalla differenza tra il numero di righe del primo file e il numero di righe del secondo file, mi occorre sapere come posso fare per ottenere quella istruzione... |
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Dec 2006
Messaggi: 104
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:47.



















