Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
Google Site



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Closed Thread
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Thread Tools Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 11-18-2007
Registrert bruker
 

Bli Dato: november 2007
Beliggenhet: ON, Canada
Innlegg: 16
sjekking oppføringer mellom filer

Jeg trenger å skrive et skript på:
Jeg har to filer der jeg trenger å se oppføringer og type sammenligne:
file1:
data01
data02
data03
data04
data05
.
.
.
data81

file2:
/ vol/vx/data01
/ vol/vx/data02
/ vol/vx/data03
/ vol/vx/data04
/ vol/vx/data05
.
.
Så hver oppføring fra file1 bør ha tilsvarende oppføring i file2. Hvis oppføringen finnes det skal bestå, men hvis det ikke er oppføring bør det si:
feil: oppføring dataXXX har ingen oppføring i file2.

Takker for hjelpen.
Sponsede lenker
  #2 (permalink)  
Old 11-18-2007
Moderator
 

Bli Date: Feb 2007
Bosted: Nederland
Innlegg: 4962
Med awk:


Code:
awk '
BEGIN {FS="/"}
FNR==NR {arr[$0]=$0;next}
{arr2[$4]=$4}
END {
  for(i in arr) {
    if (!arr2[i]) {
      print "error: entry " arr[i] " has no entry in file2"
    }
  }
}' "file1" "file2"

Hilsen
  #3 (permalink)  
Old 11-18-2007
radoulov's Avatar
--
 

Bli Date: Jan 2007
Beliggenhet: Варна, България / Milano, Italia
Innlegg: 3220

Code:
awk 'NR==FNR{x[$NF];next}
{print ($1 in x)?$1:"error: entry "$1" has no entry in file2"
}' FS="/" file2 file1


Bruk nawk eller / usr/xpg4/bin/awk på Solaris.


PS. Bare så det stolpe over,
hvis du vil ha en effekt sånn:


Code:
awk 'NR==FNR{x[$NF];next}
!($1 in x)&&$0="error: entry "$1" has no entry in file2"
' FS="/" file2 file1


Sist endret av radoulov; 11-18-2007 på 12:43..
  #4 (permalink)  
Old 11-18-2007
Skrivebeskyttet
 

Bli Dato: november 2007
Innlegg: 165
Prøv dette:


Code:
cat file1 | while read key
do
  grep "/vol/vx/$key$" file2 2>&1 >/dev/null # Some systems may accept "grep -q".
  [ $? -ne 0 ] && echo "error: entry $key has no entry in file2"
done

  #5 (permalink)  
Old 11-18-2007
Registrert bruker
 

Bli Dato: juni 2007
Sted: Beijing Kina
Innlegg: 1133
awk

Inngang:

Code:
a:
data01
data02
data03
data04
data05
b:
/vol/vx/data01
/vol/vx/data02
/vol/vx/data05

utgang:

Code:
No entry for:data03
No entry for:data04

Kode:

Code:
nawk 'BEGIN{FS="/"}
{
if (NR==FNR) 
	test[NR]=$4
else
{
	flag=0
	for (i in test)
	{
		if ($1==test[i]) 
			flag=1
	}
	if (flag==0)
		print "No entry for:"$1
}
}' b a

  #6 (permalink)  
Old 11-19-2007
drl's Avatar
drl drl is offline Forum Advisor  
Registrert bruker
 

Bli Dato: april 2007
Beliggenhet: Saint Paul, MN USA / BSD, CentOS, Debian, OS X, Solaris
Innlegg: 779
Hei.

Det er nyttig å se ulike tilnærminger. Jeg liker awk løsninger. Skallet loop Løsningen er også god, men vil kalle grep for hver linje, muligens en ulempe for lange filer.

Her er en løsning å bruke * nix-kommandoer, men en moderne shell er nødvendig for at prosessen substitusjon, "<(...)". Dette kan være nyttig hvis det ikke er hensiktsmessig eller mulig å bruke awk, perl, Etc.:

Code:
#!/usr/bin/env bash

# @(#) s1       Demonstrate feature.

set -o nounset
echo

debug=":"
debug="echo"

## Use local command version for the commands in this demonstration.

echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version bash sort cut comm sed

echo

echo " Input file data1:"
cat data1

echo
echo " Input file data2:"
cat data2

echo
echo " Results:"
comm -23 <( sort data1 ) <( cut -d/ -f4 data2 | sort ) |
sed -e 's/^/ No entry for: /'

exit 0

Produserer, bruker summer_cherry's datasett:

Code:
% ./s1

(Versions displayed with local utility "version")
GNU bash 2.05b.0
sort (coreutils) 5.2.1
cut (coreutils) 5.2.1
comm (coreutils) 5.2.1
GNU sed version 4.1.2

 Input file data1:
data01
data02
data03
data04
data05

 Input file data2:
/vol/vx/data01
/vol/vx/data02
/vol/vx/data05

 Results:
 No entry for: data03
 No entry for: data04

Se man-sidene for mer informasjon ... Skål, drl
  #7 (permalink)  
Old 11-20-2007
Registrert bruker
 

Bli Dato: november 2007
Beliggenhet: ON, Canada
Innlegg: 16
Excellent hjelpe karer ... det virker! Takk til alle som leverte hjelp.
Sponsede lenker
Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er Av


Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
sjekke feil i filer ali560045 Shell programmering og Skripting 4 06-19-2008 11:56
Hvordan logge inn i en annen ip og kontroll for filene saikumar_n Shell programmering og Skripting 2 07-11-2007 03:34
Hvordan logge inn i en annen ip og kontroll for filene saikumar_n UNIX for Advanced & ekspertbrukere 1 07-11-2007 11:13
se etter filer på ftp ... jithinravi UNIX for Dummies Spørsmål og svar 3 06-22-2007 12:25
Søker liste over oppføringer i filen for faktiske filer i dir not4google UNIX for Dummies Spørsmål og svar 2 10-18-2006 12:24



Alle klokkeslett er GMT -4. Nå er klokken 03:38.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2010. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0