我有一个直截了当的问题。如果“file”的第一列(ID)中的元素与“subfile”的第一列(ID)的元素匹配,则“file”的匹配元素应该被“subfile”的第二列元素(即符号)替换”。
我可以使用“AWK”匹配“file”和“subfile”中的“ID”,但是在使用相应的“符号”替换匹配的元素时会遇到麻烦。
请提出任何建议。
我为匹配ID而编写的脚本是:
awk 'FNR==NR {a[$1]=$1;next} 1' subfile file
SUBFILE:
"ID" "Symbol"
"204639_at" "ADA"
"204212_at" "ACOT8"
"209027_at" "ABI1"
"202382_at" "GNPDA1"
FILE
"ID" "x" "y" "z"
"204639_at" 1.22 2.33 4.66
"204212_at" 3.55 5.78 4.78
"209027_at" 4.77 3.21 9.30
"202382_at" 9.66 9.08 1.43
我需要的输出如下:
x y z
ADA 1.22 2.33 4.66
ACOT8 3.55 5.78 4.78
ABI1 4.77 3.21 9.3
GNPDA1 9.66 9.08 1.43
答案 0 :(得分:2)
使用join
:
join -j 1 FILE SUBFILE -o 2.2,1.2,1.3,1.4 | \
sed 's/Symbol//;s/"//g;s/ */:/g' | column -t -s:
给出:
x y z
ADA 1.22 2.33 4.66
ACOT8 3.55 5.78 4.78
ABI1 4.77 3.21 9.30
GNPDA1 9.66 9.08 1.43
答案 1 :(得分:1)
你可以这样做:
awk 'FNR==NR {a[$1]=$2;next} {$1=a[$1]}1' subfile file
"Symbol" "x" "y" "z"
"ADA" 1.22 2.33 4.66
"ACOT8" 3.55 5.78 4.78
"ABI1" 4.77 3.21 9.30
"GNPDA1" 9.66 9.08 1.43
或某些格式化:
awk 'FNR==NR {a[$1]=$2;next} {$1=a[$1];gsub(/\"/,"");gsub(/Symbol/,"")}1' OFS="\t" subfile file
x y z
ADA 1.22 2.33 4.66
ACOT8 3.55 5.78 4.78
ABI1 4.77 3.21 9.30
GNPDA1 9.66 9.08 1.43