【问题标题】:text file each line to command in bash [closed]文本文件每行以 bash 中的命令 [关闭]
【发布时间】:2013-11-13 12:44:15
【问题描述】:

好的,所以我有一个 pythonscript 接受这样的参数

& ./myscript.py argumentishere

你想要做的是读取一个包含多行文本的文本文件,并为每一行执行我的命令,就像这样

& ./myscript.py line1
& ./myscript.py line2
& ./myscript.py line3
ect.ect.ect

如何在 bash 脚本中实现这一点

【问题讨论】:

  • 您的 Python 脚本是否接受多个参数,还是希望将整行作为单个参数?

标签: python arrays bash text


【解决方案1】:

虽然您可以使用 bash 脚本实现此目的,但可能更简单的方法是使用 xargs 实用程序。

xargs -L 1 ./myscript.py <inputfile

bash 方式是:

while read line
do
    ./myscript $line
done <inputfile

【讨论】:

    【解决方案2】:
    #!/bin/bash
    
    cat input | while read line
    do
        ./myscript.py $line
    done
    

    您还需要在 myscript.py 的头部添加 #!/usr/bin/env python 并将 chmod 可执行属性添加到 myscript.py

    【讨论】:

    • 天哪,这是在 bash 中逐行解析文件的最糟糕的方法之一。 (更糟糕的是使用for)。
    • @gniourf_gniourf:为什么这样不好?
    • @CharlesBailey 因为这会在子shell 中执行while 循环,并使用不必要的外部cat。 bash 方式是:while read; do ...; done &lt; file,如其他答案所示。 (注意,问题标记为bash)。
    • @gniourf_gniourf:除非 python 脚本很简单并且输入由很少的行组成,否则我不会认为这些因素中的任何一个都会产生很大的影响,公平地说。
    • @CharlesBailey 这不是产生影响的问题...这只是知道如何正确地做事,这样每次你做的时候,你都做对了甚至没有思考。随心所欲做事的问题在于,这个 sn-p 很快就会变长,并且在某些时候,while 循环中会定义一些变量,你会观察到奇怪的结果(因为这个循环在subshel​​l)...哦,亲爱的,如果您从一开始就正确地完成了它。你喜欢编程,正如我在你的个人资料中看到的那样,所以你至少应该明白我的意思。
    【解决方案3】:

    如果我是你,我会修改 python 脚本以将文件名作为参数,并对每一行执行我想要的操作。

    import sys
    file = open(sys.argv[1])
    for line in file:
        #do your thing here
    

    【讨论】:

      【解决方案4】:

      你试过了吗?

      while IFS= read -r line; do
          ./myscript.py "$line"
      done < file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        • 2021-01-13
        • 1970-01-01
        • 2014-07-31
        • 1970-01-01
        相关资源
        最近更新 更多