如何將文件的內容傳遞給函數的選項/參數

如何將文件的內容傳遞給函數的選項/參數

我有一組 .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。 :::+ 就是這樣做的。

相關內容