Ersetzen einer Testzeichenfolge durch eine andere in einer bestimmten Spalte

Ersetzen einer Testzeichenfolge durch eine andere in einer bestimmten Spalte

Ich möchte in einer bestimmten Spalte einer tabulatorgetrennten Datei ( awkvermutlich mithilfe von) „CC“ durch „C“ und „AA“ durch „A“ ersetzen.

Antwort1

awk -F'\t' -vOFS='\t' '{ gsub("CC", "C", $1) ; gsub("AA", "A", $1) ; print }'

Ersetzen Sie $1durch die Spalte, die Sie ändern möchten.

Antwort2

Wenn Sie keinen Zugriff auf hätten gsub(), aber Zugriff auf haben split(), könnten Sie das Äquivalent einfach folgendermaßen erstellen:

Angesichts der Eingabe

AA      AA      CC      CC      AA      CC

das folgende awkSkript

BEGIN {
    OFS = "\t";
    split("1 3 5", Fields);
    split("A C", Replacements);
}
{
    for (i in Fields) {
        for (j in Replacements) {
            Replace = Replacements[j];
            sub(Replace Replace, Replace, $Fields[i]);
        }
    }
    print;
}

würde die gewünschten Ergebnisse für die Felder 1, 3 und 5 liefern:

A       AA      C       CC      A       CC

Auch ohne ist es möglich, wenn Sie die und Arrays im Block split()fest codieren möchten .FieldsReplacementsBEGIN

Antwort3

Zum Suchen und Ersetzen in einem Feld verwenden Sie diesen Befehl:

sed 's/whatyouwanttofind/whatyouwanttoreplace/field#'

d. h. Sie geben dies wieder:

$echo -e "1are,2are,3are,4are\n5are,6are,7are,8are"

1are,2are,3are,4are

5are,6are,7are,8are

und du willst das tun

$echo -e "1are,2are,3are,4are\n5are,6are,7are,8are" |  sed 's/are/arrr/2'

1are,2**arrr**,3are,4are

5are,6**arrr**,7are,8are

verwandte Informationen