特定の列内のテスト文字列を別の文字列に置き換える

特定の列内のテスト文字列を別の文字列に置き換える

タブ区切りファイルの特定の列で、「CC」を「C」に、「AA」を「A」に置き換えたいと思います (awkおそらく使用)。

答え1

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

$1変更したい列に置き換えます。

答え2

にアクセスできないgsub()が、 にアクセスできる場合はsplit()、次のように同等のものを作成できます。

入力された

AA      AA      CC      CC      AA      CC

次のawkスクリプト

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;
}

フィールド 1、3、5 に対して目的の結果が生成されます。

A       AA      C       CC      A       CC

ブロック内に配列をハードsplit()コードしたい場合は、それがなくても可能です。FieldsReplacementsBEGIN

答え3

1 つのフィールドで検索と置換を行うには、次のコマンドを使用します。

sed 's/whatyouwanttofind/whatyouwanttoreplace/field#'

つまり、これをエコーし​​ます:

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

1are,2are,3are,4are

5are,6are,7are,8are

そしてあなたはこれをやりたい

$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

関連情報