在python脚本内循环执行awk

在python脚本内循环执行awk,python,linux,csv,awk,Python,Linux,Csv,Awk,我有一个15列的表格文件,我想在循环中为该文件的每一行执行2个awk命令(我正在python脚本中生成许多其他函数,因此这些awk命令应该在我的脚本中) 简而言之:我要执行的每个命令都存储在两个变量中:strand_signature和strand_correction。所以我逐行读取我的csv文件并调用这两个脚本,但是在我的打印测试中,修改没有发生 有人能解释一下我在哪一点上犯了错误吗?编写脚本最简单的方法是编写单独的行,甚至只是行的一部分,运行、测试,确保它工作正常,然后继续下一部分。这样,

我有一个15列的表格文件,我想在循环中为该文件的每一行执行2个awk命令(我正在python脚本中生成许多其他函数,因此这些awk命令应该在我的脚本中)

简而言之:我要执行的每个命令都存储在两个变量中:strand_signature和strand_correction。所以我逐行读取我的csv文件并调用这两个脚本,但是在我的打印测试中,修改没有发生


有人能解释一下我在哪一点上犯了错误吗?

编写脚本最简单的方法是编写单独的行,甚至只是行的一部分,运行、测试,确保它工作正常,然后继续下一部分。这样,您一次只能解决几个问题

相反,您选择了最困难的方法:编写整个脚本,然后尝试在之后修复所有问题。这意味着您必须同时考虑以下所有问题,因为每个问题都是一个完整的问题:

  • 您的第一个awk命令在语法上无效,因为您试图在单引号中嵌套单引号,而不引用或转义它们
  • 您的第二个awk命令在语法上无效,因为它缺少一个
    }
  • awk命令都不输出任何内容
  • 您可以指定
    row
    作为
    awk
    的文件名,即使这是Python列表而不是文件
  • 您从未从
    awk
  • 即使您这样做了,
    awk
    是基于行的,而不是基于Python列表的,因此您必须相应地加入和拆分
  • 最好的选择是扔掉所有的
    awk
    ,改用Python。这样写和运行起来更容易、更健壮、更快:

    with open('my_file.csv') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter='\t')
        for row in csv_reader:
            if float(row[9]) > float(row[10]):
                row[15] = "-"
            else:
                row[15] = "+"
            # ...
            print(row)
    

    编写脚本最简单的方法是编写单独的行,甚至只是行的一部分,运行、测试、确保它工作,然后继续下一部分。这样,您一次只能解决几个问题

    相反,您选择了最困难的方法:编写整个脚本,然后尝试在之后修复所有问题。这意味着您必须同时考虑以下所有问题,因为每个问题都是一个完整的问题:

  • 您的第一个awk命令在语法上无效,因为您试图在单引号中嵌套单引号,而不引用或转义它们
  • 您的第二个awk命令在语法上无效,因为它缺少一个
    }
  • awk命令都不输出任何内容
  • 您可以指定
    row
    作为
    awk
    的文件名,即使这是Python列表而不是文件
  • 您从未从
    awk
  • 即使您这样做了,
    awk
    是基于行的,而不是基于Python列表的,因此您必须相应地加入和拆分
  • 最好的选择是扔掉所有的
    awk
    ,改用Python。这样写和运行起来更容易、更健壮、更快:

    with open('my_file.csv') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter='\t')
        for row in csv_reader:
            if float(row[9]) > float(row[10]):
                row[15] = "-"
            else:
                row[15] = "+"
            # ...
            print(row)
    

    这种方法效率不高:要么用python进行所有处理,要么用awk脚本进行所有处理。这种方法效率不高:要么用python进行所有处理,要么用awk脚本进行所有处理