ファイルの内容を関数のオプション/引数に渡す方法

ファイルの内容を関数のオプション/引数に渡す方法

.txtファイルのペアセットがあります。各ファイルペアでは、File1 に整数が含まれ、File2 にテキスト行が含まれます。私が作成しているスクリプトでFile1の整数を使用してFile2の一番上から削除する行数を指定し、その行を別のファイルに書きたいと思います。私は多くのファイルペアで並列に実行するためにgnu-parallelを使用しています。

-nFile1の内容をオプションの引数として渡すのが簡単な方法のようですhead。これは可能ですか?私は試してみましたxargsが、cat File1どちらも動作しませんでした。

サンプルファイルのペア:

File1:
2                        

File2:
AAA
BBB
CCC
DDD

希望の出力:

File3:
AAA
BBB

headgnu-parallelを使用しない場合は、File1の内容を変数に割り当てることができます(たとえオプションに渡すことができるかどうかはわかりませんが-n)。しかし、並列処理のため、{}このアプローチは複雑に見えます。

必要に応じて追加情報を提供できます。

答え1

使うコマンドの置き換え

head -n "$(cat File1)" File2

コマンド置換はコマンド出力をコマンドラインに挿入します。出力端の改行文字が削除されます。これがまさに必要なものです。

あるいは、bashでは(他のshバリエーションではありません)、次のものを使用できます。mapfileファイルを1行ずつロードする機能が組み込まれています。

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

行は配列にロードされるため、行番号はNはい。最初の行の場合、bashを使用すると。${lines[n]}$line

答え2

Gillesの答えを拡張すると、次のようになります。

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

File2に接続したいFile1が複数ある場合があります。 :::+ これがすることです。

関連情報