awkを使用してコマンドリストを作成する方法

awkを使用してコマンドリストを作成する方法

test.pyパラメータ(入力ファイル名)を含むPythonスクリプトがあります。test.py --arg filename使用できるようにシェルスクリプトでこれを実行したいと思いますawkalist.txt各行にファイル名が含まれており、Pythonコードがそれをパラメータとして使用し(list.txt)、各行を繰り返すようにします(ファイル名など)。

次のコマンドは正常に機能しますが、このコマンドラインの結果を使用してパラメータにtest.pyスクリプトを含めたいと思います。

awk '{print substr($0, 1, length($0)-11)}'  list.txt  

答え1

1つの解決策は、awkコマンド出力の各行を繰り返し、test.py各行を引数として呼び出すことです。

awk '{print substr($0, 1, length($0)-11)}' alist.txt |
while read -r; do
    test.py --arg "$REPLY"
done

別の解決策は、次のものを使用することですxargs

awk '...' list.txt | xargs -L1 test.py --arg

[注:質問に対する誤解による代替答え]

私の理解はtest.py --arg alist.txtあなたが望むものではないということです:

test.py --arg (file containing the result of your awk command)

この場合、コマンドの結果をawkファイルに保存し、そのファイルを引数として提供できますtest.py

awk '...' alist.txt > alist_processed_by_awk.txt
test.py --arg alist_processed_by_awk.txt
rm alist_processed_by_awk.txt

bashシェルを使用する場合のもう1つの短い方法は、プロセス置換を使用することです。

test.py --arg <(awk '...' alist.txt)

これは<(command)結果を含む擬似ファイルの名前に置き換えられますcommand

関連情報