Regex 根据匹配字符串,将文件中的符号替换为另一个文件中的符号

Regex 根据匹配字符串,将文件中的符号替换为另一个文件中的符号,regex,awk,sed,Regex,Awk,Sed,我不是最好的编剧,遇到了一个问题,你也许可以指导我。 我有两个文件 (1) SYMBOL.txt(其中第1列和第2列表示名称和ID) (2) PAIR.txt(第一列和第二列表示ID) 我需要将SYMBOL.txt与PAIR.txt匹配,并用SYMBOL.txt中的名称替换id (1) 我已经编写了一个简单的awk脚本来解决这个问题,但是我还需要将id替换为根本不匹配的NA(实际上我无法做到这一点) (2) 我正在将输入文件PAIR.txt修改为输出文件,但我需要一个单独的输出文件(在本例中为L

我不是最好的编剧,遇到了一个问题,你也许可以指导我。 我有两个文件

(1) SYMBOL.txt(其中第1列和第2列表示名称和ID)

(2) PAIR.txt(第一列和第二列表示ID)

我需要将
SYMBOL.txt
PAIR.txt
匹配,并用
SYMBOL.txt
中的名称替换
id

(1) 我已经编写了一个简单的awk脚本来解决这个问题,但是我还需要将
id
替换为根本不匹配的
NA
(实际上我无法做到这一点)

(2) 我正在将输入文件
PAIR.txt
修改为输出文件,但我需要一个单独的输出文件(在本例中为
LL

我写的剧本是:

awk '{print $2 $1}' SYMBOL.txt \
    | sed 's/^/sed/g' \
    | sed 's/\""/\//g' \
    | sed 's/\"/\//g' \
    | sed 's/^sed/sed -i \"s/g' \
    | sed 's/$/g"/g' \
    | sed 's/$/ PAIR.txt/g' \
    | sh >LL
我需要的示例输出:

UBA6 NA
NA NA
NA NA
NA NBAS

请给我任何建议。

与其使用
sed
来编写
sed
,它将为'PAIR.txt'中的每一行执行一个
sed
命令,我认为您最好使用多一点
awk
。这里有一种使用数组保存姓名和ID的方法。它使用一个三元操作,用字符串“NA”替换掉丢失的ID


与其使用
sed
来编写
sed
,这将对'PAIR.txt'中的每一行执行一个
sed
命令,我认为您最好使用多一点
awk
。这里有一种使用数组保存姓名和ID的方法。它使用一个三元操作,用字符串“NA”替换掉丢失的ID


您知道
sed
接受多个命令吗?@choroba和
awk
:)您知道
sed
接受多个命令吗?@choroba和
awk
:)
awk '{print $2 $1}' SYMBOL.txt \
    | sed 's/^/sed/g' \
    | sed 's/\""/\//g' \
    | sed 's/\"/\//g' \
    | sed 's/^sed/sed -i \"s/g' \
    | sed 's/$/g"/g' \
    | sed 's/$/ PAIR.txt/g' \
    | sh >LL
UBA6 NA
NA NA
NA NA
NA NBAS
awk 'FNR==NR {

    gsub(/"/,"");
    a[$2]=$1;

    next
}
{
    for (i=1;i<=NF;i++) {

        $i = ($i in a) ? a[$i] : "NA"
    }
}
1' SYMBOL.txt PAIR.txt
UBA6 NA
NA NA
NA NA
NA NBAS
NA NBAS