如何将文件的内容传递给函数的选项/参数

如何将文件的内容传递给函数的选项/参数

我有一组 .txt 文件对。在每对文件中,File1 包含一个整数,File2 包含多行文本。在我正在编写的脚本中,我想使用 File1 中的整数来指定从 File2 顶部删除多少行,然后将这些行写入另一个文件。我正在使用 gnu-parallel 在许多文件对上并行运行它。

似乎一种简单的方法是将 File1 的内容作为选项-n的参数传递head-- 这可能吗?我尝试过使用xargsand cat File1,但都不起作用。

文件对示例:

File1:
2                        

File2:
AAA
BBB
CCC
DDD

期望的输出:

File3:
AAA
BBB

如果我没有使用 gnu-parallel,我可以将 File1 的内容分配给一个变量(尽管我不知道是否可以将其传递到head-n选项中?);然而,并行{}似乎使这种方法变得复杂。

如果需要,我可以提供更多信息。

答案1

用一个命令替换

head -n "$(cat File1)" File2

命令替换将命令的输出注入到命令行中。输出末尾的换行符被删除,这正是您所需要的。

或者,在 bash 中(但不是在其他 sh 变体中),您可以使用mapfile内置用于逐行加载文件。

mapfile lines <File1
head -n "${lines[0]}" File2

这些行被加载到一个数组中,因此行号n是。对于第一行,bash 还允许您编写.${lines[n]}$line

答案2

扩展吉尔斯的答案:

parallel 'head -n "$(cat {1})" {2}' ::: File1s* :::+ Corresponding_File2s*

您可能有很多想要链接到 File2 的 File1。 :::+ 就是这样做的。

相关内容