Hier ist meine Dateitest.csv
bonjour|b|french;deutsch|french
hello|h|english;russian|french
gutentag|g|german;polish|french
ciao|i|italian|french
Ich möchte testen, ob die dritte durch | getrennte Zeile französisch ist (Französisch kann in einer anderen Teilung vorkommen, also nur in der dritten) und alle Zeilen, die dazu passen, in eine andere Datei einfügen.
Beispiel :
bonjour|b|french;deutsch|french
french;deutsch
Pass Es an
Etwas wieawk -F | '$3=="french"' file
Antwort1
awk -F '[|;]' '$3 == "french"' file >newfile
Dabei werden sowohl als Feldtrennzeichen |
als auch ;
als Feldtrennzeichen verwendet und ein Zeichenfolgenvergleich zwischen dem dritten Feld und der Zeichenfolge durchgeführt french
. Wenn die Zeichenfolge übereinstimmt, wird die Zeile ausgegeben. Alle Ausgaben werden in die Datei umgeleitet newfile
.
Bei Verwendungnur |
als Trennzeichen müsstest du mit einem regulären Ausdruck auf den Anfang des dritten Feldes testen:
awk -F '|' '$3 ~ /^french;/' file >newfile
Dieser erkennt die Zeichenfolge french;
am Anfang des dritten Felds und gibt bei Übereinstimmung die Zeile aus.
Wenn french
kann überall im dritten |
-getrennten Feld auftreten (z. B. als dutch;french
), dann möchten Sie dieses Muster vielleicht etwas lockern und verwenden
awk -F '|' '$3 ~ /french/' file >newfile
grep
wäre hier etwas umständlich zu verwenden, da es schwieriger ist, genau anzugeben, welches durch |
-getrennte Feld abgeglichen werden soll:
grep '^\([[:alpha:]]\{1,\}|\)\{2\}french;' file >newfile
Dies entspricht einer Zeichenfolge aus alphabetischen Zeichen (Buchstaben), gefolgt von einem |
Zeichen, zweimal und dann der Zeichenfolge french;
.
Mit einem erweiterten regulären Ausdruck:
grep -E '^([[:alpha:]]+\|){2}french;' file >newfile
Beachten Sie, dass das |
„Jetzt“ maskiert werden muss, damit es nicht als Alternative interpretiert wird.
Auch hier gilt: Wenn french
„kann“ irgendwo im dritten Feld vorkommen, müssen Sie den Ausdruck etwas lockern:
grep '^\([[:alpha:]]\{1,\}|\)\{2\}[^|]*french' file >newfile
oder,
grep -E '^([[:alpha:]]+\|){2}[^|]*french' file >newfile
Ich habe eingefügt , was mit jeder Reihe von Nicht- Zeichen vor dem Wort [^|]*
übereinstimmt (beispielsweise der Zeichenfolge ), und ich habe das am Ende des Wortes entfernt (oder Sie hätten das durch ersetzen können ).|
french
dutch;
;
;
[;|]