ファイルの内容を関数のオプション/パラメータに渡す方法

ファイルの内容を関数のオプション/パラメータに渡す方法

.txt ファイルのペアのセットがあります。各ファイルのペアでは、File1 に 1 つの整数が含まれ、File2 には複数のテキスト行が含まれます。私が作成しているスクリプトでは、File1 の整数を使用して、File2 の先頭から何行削除するかを指定し、それらの行を別のファイルに書き込みます。gnu-parallel を使用して、これを複数のファイル ペアで並列に実行しています。

-nこれを行う簡単な方法は、File1 の内容を のオプションのパラメータとして渡すことのようですが、これは可能ですか?とheadを使用しようとしましたが、どちらも機能しません。xargscat File1

ファイルペアの例:

File1:
2                        

File2:
AAA
BBB
CCC
DDD

望ましい出力:

File3:
AAA
BBB

headgnu-parallel を使用していなければ、File1 の内容を変数に割り当てることができます (ただし、それをのオプションに渡すことができるかどうかはわかりません-n)。ただし、parallel は{}このアプローチを複雑にするようです。

必要であればさらに詳しい情報を提供できます。

答え1

使うコマンド置換

head -n "$(cat File1)" File2

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

あるいは、bash(他のsh系では不可)では、mapfileファイルを行ごとに読み込むための組み込み関数。

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

行は配列にロードされるので、行番号はです。最初の行では、bash では と書くこともできます。${lines[n]}$line

答え2

ジルの回答を拡張します:

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

おそらく、File2 にリンクしたい File1 がたくさんあるでしょう。:::+ がそれを行います。

関連情報