如何为路径中可用的“cat”文件创建别名

ash*_*wer 4 command-line bash alias paths cat

我有两个巨大的文件(每个 150G),我需要使用一种工具,我应该将它们作为单个文件提供(因为该工具只接受一个文件)。但是,出于多种原因,我不想合并这些文件,但我无法使用类似<(cat file1 file2)或 之类的内容对它们进行管道传输myfile=$(cat file1 file2),因为脚本使用输入文件的路径,而不是其内容。

所以我需要类似下面的东西:

alias myfile = "cat file1 file2"
Run Code Online (Sandbox Code Playgroud)

这样使用以下命令就可以工作:

tool_x --file /path/myfile 
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个提到的命令,但它不起作用。

我只需要能够将“cat”命令的结果视为实际文件,并且可以使用路径访问该文件。

有可能实现这样的目标吗?

mur*_*uru 17

您可以使用命名管道:

mkfifo /path/myfile
cat file1 file2 > /path/myfile &
Run Code Online (Sandbox Code Playgroud)

在这里,要么cat命令必须发送到后台,要么您可以tool_x在另一个终端中运行,因为cat它将阻塞,直到开始从管道读取内容:

tool_x --file /path/myfile
Run Code Online (Sandbox Code Playgroud)

这本质上就是进程替换自动为您做的事情。

  • @EricDuminil 是的,足以用于目录条目。好吧,只要有人从管道中读取数据,您就可以向管道写入数据,但问题是您无法在文件中查找(读取到一个位置并跳转到另一个位置)。阅读必须是连续的。 (4认同)
  • 我不想合并它们,主要是因为,除了我现在正在使用的当前工具之外,我在相同数据上使用的其他工具需要单独提供它们。因此,将这些文件合并成一个文件将迫使我稍后再次将它们分开,这非常耗时。如果您熟悉生物信息学,我正在使用[paired-end read](shttps://thesequencingcenter.com/knowledge-base/what-are-paired-end-reads/)。 (2认同)
  • @EricDuminil 有效,是的。内存中有一个与管道关联的缓冲区。写入器可以写入直到缓冲区已满,然后阻塞。从缓冲区读取的其他内容会导致缓冲区清空,并解锁管道的写入器。线条并没有真正发挥作用。 (2认同)