![]() |
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier. |
Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
|
||||
| Faden | Thread Starter | Forum | Antworten | Last Post |
| zwei Muster löschen und entfernen Sie ein Muster | ppat7046 | Shell Programmierung und Scripting | 7 | 04-08-2009 10:19 AM |
| Löschen von Zeilen zwischen zwei Muster ohne Löschen der zweiten Muster | Ilja | Shell Programmierung und Scripting | 1 | 11-14-2008 09:53 AM |
| Grep Alle Linien zwischen 2 verschiedenen Mustern | gurpreet470 | Shell Programmierung und Scripting | 2 | 11-07-2008 04:45 PM |
| Erste die Linien zwischen letzten Vorkommen von zwei Muster | RVZ | Shell Programmierung und Scripting | 8 | 08-08-2008 06:32 PM |
| Wie man zwischen den Zeilen in Patterns? | racbern | Shell Programmierung und Scripting | 11 | 04-23-2008 08:28 AM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
löschen zwischen Muster
Hi, ich habe in diesem Forum hast den ganzen Tag lang, aber nicht in der Lage war, ausreichend Codes um mir zu helfen, eine Aufgabe. Der einzige Code, ich kann kommen, ist diese:
sed '/ [0-9] [0-9] / / [0-9] [0-9] / (/ / p, d;)' Eingabedatei> Ausgabedatei Ich möchte sed/awk / grep eine Datei für zwei Muster und löschen Sie dann die Linien zwischen den Mustern. Bitte beachten Sie die Eingabedatei ein. Dies ist nur ein kleiner Teil einer langen Datei. Alles in Fettdruck sollte gestrichen werden. In diesem Fall möchte ich auf die Suche nach dem ersten Muster [0 0 2] und der letzte Muster [2433 2433 2], und löschen Sie dann jede Zeile zwischen diesen Mustern, sondern um die Zeile [ANT_2] über der Zeile [2433 2433 2] . Ebenso möchte ich auf die Suche nach dem ersten Muster [0 0 4] und der letzte Muster [1 1 2], und löschen Sie dann jede Zeile zwischen diesen Mustern, sondern um die Zeile [ANT_6] über der Zeile [1 1 2]. Die Anzahl der Zeilen zwischen diesen Pattens kann variieren. Das einzige, was ich sehe, ist die Konstante ist [0 0]. Jede Hilfe oder Vorschlag wäre sehr zu schätzen. Eingabedatei -------- ANT_1 0 0 2 Jan 14 10:11:44 2009 Artikel Datei Pfadname: / home / la / _drc_ lagig auf Tor-Verhältnis> 500 ANT_2 2433 2433 2 Jan 14 10:13:46 2009 Artikel Datei Pfadname: / home / la / _drc_ MT1 zu Tor-Verhältnis> 40 P 1 44 -2109300 -10645700 -2095600 -10645700 -2095600 -10649700 -2088500 -10649700 -2088500 -10655700 -2071900 -10655700 ANT_3 0 0 2 Jan 14 10:13:59 2009 Artikel Datei Pfadname: / home / la / _drc_ MT2 diff Tor-Eingänge. ANT_4 0 0 2 Jan 14 10:14:01 2009 Artikel Datei Pfadname: / home / la / _drc_ diff Gold Gate-Eingänge. ANT_5 0 0 4 Jan 14 10:14:01 2009 Artikel Datei Pfadname: / home / la / _drc_ diff Gold Gate-Eingänge. ANT_6 1 1 2 Jan 14 10:14:01 2009 Artikel Datei Pfadname: / home / la / _drc_ diff Gold Gate-Eingänge. NET_AREA_RATIO_RDBS 0 0 3 Jan 14 10:14:01 2009 ANT2.OUT ANT3.OUT ANT4.OUT Gewünschte ausgabedatei ---------------- ANT_2 2433 2433 2 Jan 14 10:13:46 2009 Artikel Datei Pfadname: / home / la / _drc_ MT1 zu Tor-Verhältnis> 40 P 1 44 -2109300 -10645700 -2095600 -10645700 -2095600 -10649700 -2088500 -10649700 -2088500 -10655700 -2071900 -10655700 ANT_6 1 1 2 Jan 14 10:14:01 2009 Artikel Datei Pfadname: / home / la / _drc_ diff Gold Gate-Eingänge. |
|
||||
|
Ghostdog, Im nicht sicher, wo die Mehr Unix / Linux-Forum ist, weil ich konnte sie nicht finden in diesem Forum Liste. Ich war in der Lage, um einen Code aus diesem Forum und es zu dem, was ich mache. Es ist nicht genau, aber es ist nahe. Code ----- Code:
#!/bin/bash
function drcext
{
# Extract one line above and two lines below a pattern
awk '/[1-9] [1-9] /{ before-=1;after=2; next }
after { after--;next }
{ store[++before]=$0}
END {
for(i=1;i<=before;i++) {
print store[i]
}
}' b > c
diff b c > d
sed -i 's/[0-9]*,[0-9]*[a-z]*[0-9]*/----------------------------------------------------------------/g' d
sed -i 's/< //g' d
# Add a variable content to the beginning of the file
rulepath=`grep Rule d`
sed -i '/Rule/d' d
sed "1i $rulepath" < d > e
}
drcext
Das ist meine Eingabedatei: inputfile b --------- Code:
die1 1000 WARN_1 0 0 2 May 4 16:20:21 2009 Rule File Pathname: /coms Rule File Pathname: /home/la/_tij4_drc_ TEOS_CH minimum spacing to VIA_1 is 10.0u, must not overlap 23_K 1 1 2 May 4 16:24:00 2009 Rule File Pathname: /home/la/_tij4_drc_ TEOS_CH must be enclosed by Metal_3 10um min p 1 4 CN tmplt c 1 0 0 1 0 0 -1512633 -8706882 -1507100 -8715212 -1507100 -8668836 -1512633 -8677166 Rule File Pathname: /home/la/_tij4_drc_ SU8_chm to Bond Pad min space is 10 um 45_D2 20 20 2 May 4 16:30:03 2009 Rule File Pathname: /home/la/_tij4_drc_ SU8_chm to Bond Pad at the end of a row min space is 100 um e 1 2 CN die1 c 1 0 0 1 0 0 -1366000 -9000000 -1366000 -8991408 -1461658 -9029146 -1457396 -9031988 e 2 2 -1366000 -9000000 -1366000 -8981773 -1457396 -9031988 -1450898 -9034615 e 3 2 -1366000 -8804227 -1366000 -8800000 Rule File Pathname: /home/la/_tij4_drc_ Primer must be enclosed by SU8_prm AT_1 2 2 2 May 4 16:30:20 2009 Rule File Pathname: /home/la/_tij4_drc_ target must be covered by (drawn) dso p 1 36 CN target_bondalign c 1 0 0 1 -1676600 7170000 -24000 0 -23635 -4168 Rule File Pathname: /home/la/_tij4_drc_ SU8_prm must overlap dso over gld_tgt by 3um min AT_5 2 2 2 May 4 16:30:20 2009 Rule File Pathname: /home/la/_tij4_drc_ SU8_prm/chm/nzl not allowed over gld_tgt p 1 36 CN target_bondalign c 1 0 0 1 -1676600 7170000 -24000 0 -23635 -4168 -22553 -8208 -20785 -12000 -18385 -15427 Rule File Pathname: /home/la/_tij4_drc_ contact not allowed in stitch zone su8_14_26A 55 55 2 May 4 16:30:30 2009 Rule File Pathname: /home/la/_tij4_drc_ NOZZLE minimum width is 10um (for 14um thick material) p 1 114 CN resistor_array c 1 0 0 1 0 0 -1052100 -7525307 -1052067 -7525796 -1052066 -7525803 -1051974 -7526268 Das ist mein Ausgabedatei: ausgabedatei e ----------- Code:
Rule File Pathname: /home/la/_tij4_drc_ ---------------------------------------------------------------- 23_K 1 1 2 May 4 16:24:00 2009 TEOS_CH must be enclosed by Metal_3 10um min ---------------------------------------------------------------- AT_1 2 2 2 May 4 16:30:20 2009 target must be covered by (drawn) dso ---------------------------------------------------------------- AT_5 2 2 2 May 4 16:30:20 2009 SU8_prm/chm/nzl not allowed over gld_tgt ---------------------------------------------------------------- su8_14_26A 55 55 2 May 4 16:30:30 2009 NOZZLE minimum width is 10um (for 14um thick material) Ich bin mir nicht sicher, warum der awk Befehl Löschen Sie die Zeilen, die sich durch die Suche pattern [1-9] [1-9]. Die ursprünglich für die Buchung ist für diesen Code, um die eine Zeile oben und zwei Zeilen unterhalb des pattern [1-9] [1-9]. Dieser Code ist rückwärtskompatibel. Es löscht, anstatt des Extrakts, dass ist der Grund, warum ich die Verwendung des diff, um die Zeilen, die gelöscht werden soll. Bitte lassen Sie mich wissen, wie man recode es zu extrahieren, anstatt zu löschen. Es gibt ein Problem mit diesem Code, I dont verstehen, ist, dass ich das Muster [1-9] [1-9], so sollte es nicht extrahieren Sie die Zeile: 55 55 2 4. Mai 16:30:30 2009 Aber das ist es, was ich wollte. Ich möchte auch die Zeile: 20 20 2 4. Mai 16:30:03 2009 Aber es hat nicht gewonnen. Wie ändere ich das Muster / [1-9] [1-9] /, so dass sie sich beliebige Zeichenfolge, dh, 55 55 2 oder 20 20 2? Ich habe versucht, ein anderes Muster / [1-9] * [1-9] * / oder etwas in dieser Linie, aber es funktioniert nicht. Sorry für die lange Anfrage aber jede beraten wäre sehr zu schätzen. Das ist mein Code: Zuletzt bearbeitet von vgersh99; am 05-28-2009 04:01 PM.. Grund: Code-Tags hinzugefügt |
| Ausgezeichnet Bits / zu Lasten shamushamu zu diesem Post | |||
| Datum | User | Kommentar | Betrag |
| 05-28-2009 | vgersh99 | N / A | 0 |
|
||||
|
Sorry about that, vgersh99. Ich bin neu in diesem Forum und Linux. Ich habe gerade festgestellt, und setzt meine Codes. Ich habe die Muster zu: Code:
awk '/^[1-9]/{ before-=1;after=2; next }
Aber ich bin immer noch sehr interessiert, um zu sehen, wenn jemand eine bessere Lösung als diese. Ich glaube, das kann man mit ein paar Zeilen. |
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|