Zeilen aus Datei ausgeben

Hallo!
mit welchen Programm kann man einzelne Zeichen aus Dateien ausgeben??

Ich will zB aus ein paar Dateien jeweils die erste und vierte
Zeile ausgeben lassen.

Danke!

mit welchen Programm kann man einzelne Zeichen aus Dateien
ausgeben??

mit tail

man tail

sollte Dir die genaue Anwendung erlÀutern.

alternativ sed

HTH,

Sebastian

ach so mit tail geht das also!

ich hab tail immer nur so benutzt:

tail -f /var/log/messages

ist wohl die haeufigste nutzung
!

danke

Hi,

mit welchen Programm kann man einzelne Zeichen aus Dateien
ausgeben??

mit tail

hm, da die ersten paar Zeilen gelesen werden sollen, wĂŒrde ich eher zu head tendieren.

Cheatah

Hallo David,

mit welchen Programm kann man einzelne Zeichen aus Dateien
ausgeben??

Hier ist Perl Dein Freund.

Ich will zB aus ein paar Dateien jeweils die erste und vierte
Zeile ausgeben lassen.

Kopiere folgenden Perl-Aufruf in Deine (Linux-)Komandozeile
(das ganze muss eine Zeile ohne ZeilenumbrĂŒche sein!):

perl -e '@n=(1,4);foreach(@ARGV){open(FILE,$\_);@lines=;foreach$n(@n){print"$\_,$n:";defined($lines[$n-1])?print"$lines[$n-1]":stuck\_out\_tongue:rint"#GIBTS NICHT#\n";}}' datei1.txt datei2.txt 

In die Zahlenliste am Anfang @n=( 
 ) schreibst Du die
Zeilennummern, die jeweils ausgegeben werden sollen und
am Ende folgen die zu untersuchenden Dateien.

Danke!

Bitte :wink:

Gruss,
-Andreas (der Perl-Einzeiler mag 
).

Hi,

@lines=;

dies ist allerdings nur dann empfehlenswert, wenn die Dateien relativ klein sind
 :smile:

Cheatah

Hi auch,

@lines=;

dies ist allerdings nur dann empfehlenswert, wenn die Dateien
relativ klein sind
 :smile:

Cheatah

Du programmierst doch auch Perl, wie wÀrs denn mit einem
Verbesserungsvorschlag (kĂŒrzer, speicherschonender, gleiche
FunktionalitÀt, 
)?

Ich lerne nÀmlich gerne dazu :wink:

Kollegiale GrĂŒsse,
-Andreas.

Du programmierst doch auch Perl, wie wÀrs denn mit einem
Verbesserungsvorschlag (kĂŒrzer, speicherschonender, gleiche
FunktionalitÀt, 
)?

Kein Perl.

Ich lerne nÀmlich gerne dazu :wink:

Das ist das einzige Argument, was Deine Frage rechtfertigt.

Sebastian

Hi Sebastian,

Du programmierst doch auch Perl, wie wÀrs denn mit einem
Verbesserungsvorschlag (kĂŒrzer, speicherschonender, gleiche
FunktionalitÀt, 
)?

Kein Perl.

Dann poste mal Deine tail-Lösung, die kann ich
mir nicht so richtig vorstellen 


Ich lerne nÀmlich gerne dazu :wink:

Das ist das einzige Argument, was Deine Frage rechtfertigt.

Zu gĂŒtig von Dir.

Sebastian

Andreas (möchte immer noch dazulernen).

Du programmierst doch auch Perl, wie wÀrs denn mit einem
Verbesserungsvorschlag (kĂŒrzer, speicherschonender, gleiche
FunktionalitÀt, 
)?

Kein Perl.

Dann poste mal Deine tail-Lösung, die kann ich
mir nicht so richtig vorstellen 


Arrgh! Ich habe Mist geschrieben, dachte an die Option „–lines“, die aber anders wirkt.

Cheetah hatte mit „head“ den Volltreffer.

Ich lerne nÀmlich gerne dazu :wink:

Das ist das einzige Argument, was Deine Frage rechtfertigt.

Zu gĂŒtig von Dir.

?

Andreas (möchte immer noch dazulernen).

Se "Aua! "bastian (hat mit tail leider nichts zu bieten)

P.S: Nichs gegen Perl, aber solche Dinge mit Perl zu lösen ist mit Kanonen auf Spatzen schießen. daher meine Bemerkung. Und mit tail ist wohl mit EiswĂŒrfeln nach dem Mond schmeissen.

Guten Abend nochmals,

Kein Perl.

Dann poste mal Deine tail-Lösung, die kann ich
mir nicht so richtig vorstellen 


Arrgh! Ich habe Mist geschrieben, dachte an die Option
„–lines“, die aber anders wirkt.

Cheetah hatte mit „head“ den Volltreffer.

Bei meinem head zumindest wird mit --lines=N
jede Zeile von der ersten Zeile bis zur N.ten
angezeigt, das Ausgangsproblem war aber beliebige
Einzelzeilen, nicht komplette Bereiche auszugeben.

P.S: Nichs gegen Perl, aber solche Dinge mit Perl zu lösen ist
mit Kanonen auf Spatzen schießen. daher meine Bemerkung.

Die Practical Extraction and Reporting Language
ist anfangs gerade fĂŒr solche Probleme von Larry Wall
geschrieben worden. Sie ist in dem Sinne ein um C-Syntax
aufgepepptes sed, awk, grep, bash, etc. und hat den grossen
Vorteil, dass man sich nur eine Syntax plattformĂŒbergreifend
aneignen muss.

Also wenn ich das obige Problem möglichst fix lösen will,
bin ich wohl mit Perl noch am besten dran, den sed-Syntax
ist AFAIK OS- und versionsabhÀngig und C oder Java ist dann
wohl wirklich mit „Kanonen auf Spatzen“ geschossen.

Und mit tail ist wohl mit EiswĂŒrfeln nach dem Mond
schmeissen.

Und meine head-Version kann ich wohl gleich hinterschmeissen 


Gruss,
-Andreas.

Hi,

Du programmierst doch auch Perl, wie wÀrs denn mit einem
Verbesserungsvorschlag (kĂŒrzer, speicherschonender, gleiche
FunktionalitÀt, 
)?

kein Code, aber ein Vorschlag: Zeilenliste sortieren; Datei zeilenweise einlesen; bei Übereinstimmung Zeilennummer erster Eintrag im Array Zeile ausgeben && Array shiften.

Aufhören, wenn scalar Array == 0, nicht wenn EOF :smile:

Cheatah

leute, seid ihr noch zu retten?

P.S: Nichs gegen Perl, aber solche Dinge mit Perl zu lösen ist
mit Kanonen auf Spatzen schießen. daher meine Bemerkung.

ack!

Die Practical Extraction and Reporting Language
ist anfangs gerade fĂŒr solche Probleme von Larry Wall
geschrieben worden. Sie ist in dem Sinne ein um C-Syntax
aufgepepptes sed, awk, grep, bash, etc. und hat den grossen
Vorteil, dass man sich nur eine Syntax plattformĂŒbergreifend
aneignen muss.

also perl benutze ich, fuer cgis oder wenn ich sockets brauche, ansonsten ist es kanonen auf spatzen, insbesondere, wenn man dann noch shell-zeilen absetzt


Also wenn ich das obige Problem möglichst fix lösen will,
bin ich wohl mit Perl noch am besten dran, den sed-Syntax
ist AFAIK OS- und versionsabhÀngig

schon seit jahrzehnten nicht mehr. und sed ist nicht wirklich das tool der wahl (obwohl ich nicht bestreiten will, dass es da auch ne loesung gibt).

und C oder Java ist dann
wohl wirklich mit „Kanonen auf Spatzen“ geschossen.

stringverarbeitung in c und java?

Und mit tail ist wohl mit EiswĂŒrfeln nach dem Mond
schmeissen.

Und meine head-Version kann ich wohl gleich hinterschmeissen

wieso?

#!/bin/sh #or wherever mr. bourne resides

head -1 $1
head -4 $1 | tail -1

aber in der tat, mittel der wahl ist awk, das schweizer taschenmesser:

awk ‚NR=1 || NR=4‘ datei

joachim, der perl auch von berufs wegen nur noch selten verwenden darf, immerhin ist das schon beinah nen angriffstool :wink:

Hi Joachim,

leute, seid ihr noch zu retten?

Naja, ich glaube man kann schlimmere Dinge anstellen,
als darĂŒber zu diskutieren, wie man geschickt Zeilen
aus Dateien extrahiert. Mit Deiner Antwort ist nun
bei mir die Hoffnung auf eine form-vollendete
Lösung aufgetaucht :wink:

aber in der tat, mittel der wahl ist awk, das schweizer
taschenmesser:

awk ‚NR=1 || NR=4‘ datei

Dein Ansatz mit awk ist schön kompakt und mit zwei „=“ mehr
macht er auch auf meiner Linuxkiste mit einer Datei das was urspĂŒnglich gefragt war:

awk ‚NR == 1 || NR == 4‘ datei

Wie gehe ich nun aber mit awk auf diese Weise eine Dateiliste
durch? Muss ich da ARGV in eine for-Schleife verpacken?

Schonmal danke fuer Deine BemĂŒhungen!

-Andreas.

Dein Ansatz mit awk ist schön kompakt und mit zwei „=“ mehr
macht er auch auf meiner Linuxkiste mit einer Datei das was
urspĂŒnglich gefragt war:

oerks, peinlich, dass kommt davon, wenn man bereits ueber das naechste problem (heads or tails) nachdenkt


awk ‚NR == 1 || NR == 4‘ datei

so sollte es heissen, ueberall


Wie gehe ich nun aber mit awk auf diese Weise eine Dateiliste
durch? Muss ich da ARGV in eine for-Schleife verpacken?

mit plain awk nicht moeglich (unter freiem unix meist schon, da dort awk=gawk), mit nawk oder gawk schon:

nawk ‚FNR==1 || FNR==4‘ file1 file2


man bemerke FNR, bezieht sich auf die zeilenummer im aktuellen file, waehrend sich NR auf die zeilennummer insgesammt in diesem awk lauf bezieht


joachim

1 Like