如何使用 awk 构建命令列表

如何使用 awk 构建命令列表

test.py我有带有参数(输入文件名)的python 脚本。我想在 shell 脚本中运行它,以便我可以test.py --arg filename使用awk.我已经准备好alist.txt其中每行包含文件名,我希望 python 代码将其(list.txt)作为参数并遍历每一行(即文件名)并运行它。

以下命令工作正常,但我想使用此命令行的结果将 test.py 脚本包含在参数中。

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

答案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是 shell,另一种更短的方法是使用进程替换:

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

这里<(command)被替换为包含 的结果的伪文件的名称command

相关内容