Ich habe mehrere Dateien mit dem folgenden Format:
Num name1 name2 value
So sieht beispielsweise die Datei mit dem Namen in1.sp folgendermaßen aus:
C1 in1 out1 3.9e-12
C2 foo st1/in1 1.2e-14
C3 foo2 in1 8.3e-14
...
und so weiter. In allen Zeilen enthält eine der Namensspalten den Dateinamen. Ich möchte den gesamten Eintrag entfernen, wenn er den Dateinamen enthält, auch wenn anderer Text vorhanden ist. Wenn also oben die Eingabe ist, wäre die gewünschte Ausgabe:
C1 out1 3.9e-12
C2 foo 1.2e-14
C3 foo2 8.3e-14
...
Danke!
Antwort1
Wenn ich dich auch richtig verstehe, probier mal folgendes
for f in *.sp; do
sed "s/[^ ]*${f%.*}[^ ]*//" "$f" | column -t
done
Ausgabe:
C1 out1 3.9e-12
C2 foo 1.2e-14
C3 foo2 8.3e-14
Antwort2
Wenn ich Sie richtig verstehe, möchten Sie alle Feldwerte entfernen, die eine Übereinstimmung mit dem Dateinamen (abzüglich der Erweiterung) enthalten.
Wenn ja, könnten Sie eine feldweise Untersuchung durchführen grep
in perl
:
$ cat in1.sp
C1 in1 out1 3.9e-12
C2 foo st1/in1 1.2e-14
C3 foo2 in1 8.3e-14
Dann
$ perl -alpe '$_ = join "\t", grep { $_ !~ (split(/\./,$ARGV))[0] } @F' in1.sp
C1 out1 3.9e-12
C2 foo 1.2e-14
C3 foo2 8.3e-14
Antwort3
Mit können Sie awk
die gewünschten Spalten auswählen
$ awk '{print $1 "\t" $2 "\t" $4}' in1.sp
C1 in1 3.9e-12
C2 foo 1.2e-14
C3 foo2 8.3e-14
Dies funktioniert, solange garantiert ist, dass die Felder in den Spalten nicht leer sind und keine Leerzeichen enthalten.