下面是我的示例文件(由制表符分隔的两列):
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
任何建议请。
答案 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
功能还允许我们根据需要删除它们以查看输出。