The UNIX and Linux Forums  


Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 10-04-2008
jolecanard jolecanard is offline
Registrierte Nutzer
  
 

Join Date: Sep 2008
Beiträge: 36
Unhappy awk ändert meine FS!

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?
  #2 (permalink)  
Old 10-04-2008
vidyadhar85's Avatar
vidyadhar85 vidyadhar85 is offline Forum Staff  
Moderator (der Tutor)
  
 

Join Date: Jun 2008
Lage: INDIEN
Posts: 1407
Set OFS \u003d "" alle nicht von Räumen Sie
  #3 (permalink)  
Old 10-04-2008
jolecanard jolecanard is offline
Registrierte Nutzer
  
 

Join Date: Sep 2008
Beiträge: 36
Ich habe bereits versucht, die ...
Das Problem ist, dass dann alle meine Spalten Abstand mit nur einem Raum!

Ich möchte die Struktur:

Code:
 
"   "3" "xxxxxx"  "x.xxxxExx" "xxxxxx"  "x.xxxxExx"...

  #4 (permalink)  
Old 10-04-2008
jolecanard jolecanard is offline
Registrierte Nutzer
  
 

Join Date: Sep 2008
Beiträge: 36
Thumbs up

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?
  #5 (permalink)  
Old 10-04-2008
Franklin52 Franklin52 is offline Forum Staff  
Moderator
  
 

Join Date: Feb 2007
Posts: 4334
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
Closed Thread

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 01:40 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0