![]() |
|
|
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 |
| Ändern Genehmigung mit FTP | panknil | Shell Programmierung und Scripting | 3 | 11-07-2007 08:08 PM |
| Ändern userID und Ändern von Gruppen-und GID | deal732 | Shell Programmierung und Scripting | 2 | 04-18-2007 11:09 AM |
| Ändern der Reihenfolge der Benutzung von sed | venu_nbk | UNIX for Dummies Questions & Answers | 9 | 07-29-2006 06:03 PM |
| Benutzer ändern | Bab00shka | Shell Programmierung und Scripting | 2 | 08-01-2003 05:44 AM |
| Ändern der IP - | Hordak | UNIX for Dummies Questions & Answers | 2 | 08-03-2002 01:42 AM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
Hallo gibt, Hier ist (ein Teil) der Datei, die ich ändern möchte,. Beachten Sie die drei Felder vor dem "3" (zu "2" oder "0" auch). Code:
3 621530 1.1935E-02 631530 1.1293E+01 641530 1.1117E-02 571540 4.4419E-14 3 581540 2.6670E-10 591540 3.8610E-09 601540 1.1016E-06 611540 3.2618E-06 3 611541 6.5572E-07 621540 9.8307E+00 631540 3.1177E+00 641540 1.4615E+00 3 571550 0.0000E+00 581550 8.8139E-12 591550 1.0739E-09 601550 2.5639E-07 3 611550 1.1011E-06 621550 3.6787E-05 631550 3.4821E+00 641550 3.1855E+00 3 641551 0.0000E+00 581560 9.4585E-13 591560 7.5358E-11 601560 1.2023E-07 3 611560 1.7968E-07 621560 5.4237E-04 631560 3.0054E-02 641560 6.5687E+00 3 581570 2.3926E-14 591570 9.9322E-12 601570 4.3929E-09 611570 4.6793E-07 3 621570 5.5911E-06 631570 6.3564E-04 641570 3.2355E+00 591580 2.8608E-13 Ich möchte einige ID (zB 621530) und ändern Sie den Wert danach. Ich bin mit diesem Skript: Code:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{}
NR==FNR{a[$0]=$0; next}
{for(i=2;i<9;i+=2)if($i in a){$(i+1)=var}}
#{$1=" "$1}
{print}' ID_to_be_changed my_file
Das Problem ist, dass sie entfernt den drei Räume vor der Zeile, wenn dieser etwas in der Reihe ... Entfernen der auskommentierte Zeile löst das Problem. Allerdings weiß ich nicht, wie man die gleiche Anzahl von Leerzeichen zwischen den Zeilen: 2 Räume zwischen der ID und den folgenden Wert, und 1 Raum zwischen einem Wert und die ID nach, dass (das Skript über alles, was sich in einem Raum). Kann jemand mir helfen? |
|
||||
|
Im Moment ist die einzige Lösung, die ich habe ist: Code:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{FS=OFS=" "}
NR==FNR{a[$0]=$0; next}
{for(i=4;i<9;i+=2)if($i in a){$(i+1)=var}}
{for(i=4;i<9;i+=2)if($i in a){print " ",$1,$2," "$3,$4," "$5,$6," "$7,$8," "$9;next}}
{print}' ID_to_be_changed my_file
In der Tat für einige Zeilen, einige Werte haben nicht das Format "x.xxxxExxx", aber weniger Zeichen (zB "0.0"). Dann werden die fehlenden Zeichen sind "Räume", um die Ausrichtung: Code:
2 982520 1.6134E-14 982530 1.7241E-17 982540 3.4164E-20 982550 1.2285E-24 2 992530 1.8708E-17 992541 6.2076E-22 992540 7.5646E-20 992550 7.0917E-22 2 162500 7.6697E-08 0 0.0000E+00 0 0.0000E+00 0 0.0000E+00 3 10030 2.0892E-01 30060 6.0786E-04 30070 1.3046E-05 40090 1.9438E-05 3 40100 1.1748E-04 60140 1.6964E-05 280660 0.0000E+00 290660 1.4066E-14 3 300660 5.0403E-09 290670 7.6644E-19 300670 2.4718E-10 300680 1.1002E-12 Meine Lösung funktioniert nur solange, wie ich bin nicht Wertewandel auf die Zeilen mit "reduziert" Zeichen ... (solange nichts geändert wird in der Zeile, awk nicht wieder Zusammenfügen der Zeile, damit die Erhaltung der richtigen Abstand). Auch mit dem Argument, alle in gedruckter Form ist nicht bequemer ... Wie kann ich diese zwei Probleme lösen? |
|
||||
|
Sie können sich den Druck der printf mit einem festen Format, so etwas wie: Code:
VALUE=".........."
awk -v var="$VALUE" 'BEGIN{FS=OFS=" ";fmt="%5s%7s%12s%7s%12s%7s%12s%7s%12s\n"}
NR==FNR{a[$0]=$0; next}
{for(i=4;i<9;i+=2)if($i in a){$(i+1)=var}}
{for(i=4;i<9;i+=2)if($i in a){printf(fmt,$1,$2,$3,$4,$5,$6,$7,$8,$9);next}}
{print}' ID_to_be_changed my_file
Grüße |
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|