使用awk从两列获取ID

时间:2014-04-18 07:24:35

标签: regex awk

下面是我的示例文件(由制表符分隔的两列):

A:Q08465 "\t" B-60323N

B-60323N "\t" A:P38806

A:P50947 "\t" B-60323N

A:P54784 "\t" A:P29469

A:P29469 "\t" A:P32833

A:P29469 "\t" A:P50874

我需要以制表符分隔格式获取由字母A表示的Id对。

例如。

P54784 P29469

P29469 P32833

P29469 P50874

任何建议请。

7 个答案:

答案 0 :(得分:3)

您可以缩短awk某些内容:

awk -F":|\t" '$1$3=="AA" {print $2,$4}' file
P54784 P29469
P29469 P32833
P29469 P50874

答案 1 :(得分:2)

这应该这样做

$ awk -F'[:\t]' '$1 == "A" && $1 == $3 {print $2 "\t" $4}' data.txt 
P54784  P29469
P29469  P32833
P29469  P50874

答案 2 :(得分:2)

$ awk 'BEGIN{FS=OFS="\t"} sub(/A:/,"",$1) && sub(/A:/,"",$2)' file
P54784  P29469
P29469  P32833
P29469  P50874

答案 3 :(得分:2)

另一种变体:

awk -F"A:" 'NF==3{print $2$3}' data
P54784  P29469
P29469  P32833
P29469  P50874

标签仍附加到输出中的$2值。

答案 4 :(得分:1)

像这样:

cat file | awk -F'[:\t]' '$1 == "A" && $3 == "A" {print $2" "$4}'

输出:

P54784 P29469
P29469 P32833
P29469 P50874

答案 5 :(得分:1)

awk '{if ($1 ~ /A/ && $2 ~ /A/) {sub(/A./,"",$1);sub(/A./,"",$2); print $1,$2;}}' input.txt

答案 6 :(得分:1)

根据您的数据集,您可以执行以下操作:

$ awk 'BEGIN{FS=OFS="\t"}gsub(/A:/,"")==2' file
P54784  P29469
P29469  P32833
P29469  P50874

gsub函数返回所做的替换次数。由于您打算打印由字母A表示的ID对,我们将其用于替换。当返回值与我们的==2检查匹配时,它会形成一个真实的语句(对于包含A的id对的行,它会自动触发默认的打印操作。

使用gsub功能还允许我们根据需要删除它们以查看输出。