我有一个包含示例ID的文件。 我想生成一个示例参与者查找表,该表应有两列由选项卡分隔。第一列应为 GTEX-1117F-0226-SM-5GZZ7 GTEX-1117F 我能够从文件中获取第一个 ID:
grep "GTEX" gene_tpm_2017-06-05_v8_brain_cortex.gct | awk '{$1=$2=$3=$4=""; printf $0 }' | xargs -n1 > ids_bed.txt
现在我的ids_bed.txt文件如下所示:
GTEX-1117F-3226-SM-5N9CT
GTEX-111FC-3126-SM-5GZZ2
GTEX-1128S-2726-SM-5H12C
GTEX-117XS-3026-SM-5N9CA
GTEX-1192X-3126-SM-5N9BY
GTEX-11DXW-1126-SM-5H12Q
我想添加GTEX-1117F作为第二列,依此类推 我试图这样做:
sed -re 's/(GTEX-[[:alnum:]]+)_1/1/g' ids_bed.txt > ids_bed_1.txt
但它不会生成第二列。 我希望我的最终文件看起来像这样:两列都用制表符分隔:
GTEX-1117F-3226-SM-5N9CT GTEX-1117F
GTEX-111FC-3126-SM-5GZZ2 GTEX-111FC
如果您显示的样本(最后一个)是需要的最终输出,那么您只需尝试以下awk
应该可以工作。
awk 'BEGIN{FS=OFS="-"} {print $0" "$1,$2}' Input_file
说明:简单的解释是,将FS
和OFS
设置为BEGIN
部分中-
。在主程序中打印当前行,后跟空格,第一个字段 OFS 和第二个字段。
$ awk -F'-' -v OFS='t' '{print $0, $1 FS $2}' ids_bed.txt
GTEX-1117F-3226-SM-5N9CT GTEX-1117F
GTEX-111FC-3126-SM-5GZZ2 GTEX-111FC
GTEX-1128S-2726-SM-5H12C GTEX-1128S
GTEX-117XS-3026-SM-5N9CA GTEX-117XS
GTEX-1192X-3126-SM-5N9BY GTEX-1192X
GTEX-11DXW-1126-SM-5H12Q GTEX-11DXW
使用sed
$ sed -E 's/(.*)([^-]*-){3}.*/&t1/' input_file
使用awk
$awk -F'-' '{s=$1FS$2;$0=$0"t"s}1' OFS="-" input_file
输出
GTEX-1117F-3226-SM-5N9CT GTEX-1117F
GTEX-111FC-3126-SM-5GZZ2 GTEX-111FC
GTEX-1128S-2726-SM-5H12C GTEX-1128S
GTEX-117XS-3026-SM-5N9CA GTEX-117XS
GTEX-1192X-3126-SM-5N9BY GTEX-1192X
GTEX-11DXW-1126-SM-5H12Q GTEX-11DXW
我会按照以下方式使用 GNUsed
来完成此任务,让file.txt
内容
GTEX-1117F-3226-SM-5N9CT
GTEX-111FC-3126-SM-5GZZ2
GTEX-1128S-2726-SM-5H12C
GTEX-117XS-3026-SM-5N9CA
GTEX-1192X-3126-SM-5N9BY
GTEX-11DXW-1126-SM-5H12Q
然后
sed 's/(GTEX-[^-]*)(.*)/12t1/' file.txt
给出输出
GTEX-1117F-3226-SM-5N9CT GTEX-1117F
GTEX-111FC-3126-SM-5GZZ2 GTEX-111FC
GTEX-1128S-2726-SM-5H12C GTEX-1128S
GTEX-117XS-3026-SM-5N9CA GTEX-117XS
GTEX-1192X-3126-SM-5N9BY GTEX-1192X
GTEX-11DXW-1126-SM-5H12Q GTEX-11DXW
说明:我使用 2 个捕获组,一个用于 GTEX-(除 -) 之外的任何内容,一个用于行的其余部分。我用整行替换整行12
这是整行,TAB 然后是第一组的内容。
(在 GNU sed 4.7 中测试)
另一个选项,awk
使用与字符串开头的 GTEX 和 1+ 字母数字字符匹配的模式。
如果有匹配项,请打印整行加上匹配项。
awk 'match($0, /^GTEX-[[:alnum:]]+/) {
print $0, substr($0, RSTART, RLENGTH)
}' file
输出
GTEX-1117F-3226-SM-5N9CT GTEX-1117F
GTEX-111FC-3126-SM-5GZZ2 GTEX-111FC
GTEX-1128S-2726-SM-5H12C GTEX-1128S
GTEX-117XS-3026-SM-5N9CA GTEX-117XS
GTEX-1192X-3126-SM-5N9BY GTEX-1192X
GTEX-11DXW-1126-SM-5H12Q GTEX-11DXW