示例:文件名:ENSG00000000003
ENSG00000000003 43120.829491094
ENSG00000000005 39604.4956791524
ENSG00000000419 7645.05624570546
ENSG00000000457 2157.49855156382
ENSG00000000460 3317.98417717746
ENSG00000000938 6327.40515535397
预期产出;理想情况下,文件名前面有一个制表符:
ENSG00000000003
ENSG00000000003 43120.829491094
ENSG00000000005 39604.4956791524
ENSG00000000419 7645.05624570546
ENSG00000000457 2157.49855156382
ENSG00000000460 3317.98417717746
ENSG00000000938 6327.40515535397
我想为我的 45000 个文件循环执行此操作
我会使用标准的 UNIX 编辑器(当然!):
这会向 发送一小段命令脚本
ed
,即:i
) 一些文本;文本作为文件名传递printf
,前面有一个制表符 (\t
).
) 后,将文件保存到磁盘 (w
) 并退出 (q
)如果文件数确实超过了命令行限制,那么您可以使用
find
命令;根据需要调整参数(起始目录、文件名等):核心解决方案是相同的,但包含在我所谓的“查找外壳”中——为每个匹配的(单个)文件名
find
执行;sh -c ...
该findsh
字符串是一个存根名称,$0
并且文件名被传递到该 shell 以代替{}
花括号。然后,shell 本身将文件名作为参数$1
,这就是printf
anded
命令使用的内容。或者,仍然使用
ed
, withzsh
,一次调用并且没有命令行限制(长度或参数数量):(
zsh
'sprintf
支持%m$
说明符重用参数。)