![如何使用 awk 构建命令列表](https://linux22.com/image/118330/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20awk%20%E6%9E%84%E5%BB%BA%E5%91%BD%E4%BB%A4%E5%88%97%E8%A1%A8%20.png)
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
。