gpt4 book ai didi

database - 我如何使用 sed 使用引用文件在文件中进行数千次替换?

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:41 24 4
gpt4 key购买 nike

我有一个包含两列的大文件,如下所示:

 tiago@tiago:~/$ head Ids.txt 
TRINITY_DN126999_c0_g1_i1 ENSMUST00000040656.6
TRINITY_DN126999_c0_g1_i1 ENSMUST00000040656.6
TRINITY_DN126906_c0_g1_i1 ENSMUST00000126770.1
TRINITY_DN126907_c0_g1_i1 ENSMUST00000192613.1
TRINITY_DN126988_c0_g1_i1 ENSMUST00000032372.6
.....

我还有另一个包含数据的文件,如下所示:

"baseMean" "log2FoldChange" "lfcSE" "stat" "pvalue" "padj" "super" "sub" "threshold"
"TRINITY_DN41319_c0_g1" 178.721774751278 2.1974294626636 0.342621318593487 6.41358066008381 1.4214085388179e-10 5.54686423073089e-08 TRUE FALSE "TRUE"
"TRINITY_DN87368_c0_g1" 4172.76139849472 2.45766387851112 0.404014016558211 6.08311538160958 1.17869459181235e-09 4.02673069375893e-07 TRUE FALSE "TRUE"
"TRINITY_DN34622_c0_g1" 39.1949851245197 3.28758092748061 0.54255370348027 6.05945716781964 1.3658169042862e-09 4.62597265729593e-07 TRUE FALSE "TRUE"
.....

我正在考虑使用 sed 来转换数据文件第一列中的值,将第一个文件用作字典。

即依次考虑数据文件的每一行,如果第一列中的值与字典文件第一列中的值匹配,则进行替换;否则,该行将被简单地打印出来。

如有任何建议,我们将不胜感激。

最佳答案

你可以把你的第一个文件 Ids.txt 变成一个 sed 脚本:

$ sed -r 's| *(\S+) (\S+)|s/^"\1/"\2/|' Ids.txt > repl.sed
$ cat repl.sed
s/^"TRINITY_DN126999_c0_g1_i1/"ENSMUST00000040656.6/
s/^"TRINITY_DN126999_c0_g1_i1/"ENSMUST00000040656.6/
s/^"TRINITY_DN126906_c0_g1_i1/"ENSMUST00000126770.1/
s/^"TRINITY_DN126907_c0_g1_i1/"ENSMUST00000192613.1/
s/^"TRINITY_DN126988_c0_g1_i1/"ENSMUST00000032372.6/

这会删除前导空格并使每一行成为替换命令。

然后您可以使用此脚本在您的数据文件中进行替换:

sed -f repl.sed datafile

... 重定向到另一个文件,或就地使用 sed -i

如果你没有 GNU sed,你可以使用第一个命令的这个 POSIX 兼容版本:

sed 's| *\([^ ]*\) \([^ ]*\)|s/^"\1/"\2/|' Ids.txt

这使用基本的而不是扩展的正则表达式,并使用 [^ ] 作为“非空格”而不是 \S

关于database - 我如何使用 sed 使用引用文件在文件中进行数千次替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35215734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com