python将许多文件中的特定列写入一个文件

时间:2016-06-23 10:01:43

标签: python file awk

我正在尝试读取许多文件,并从这些文件中将特定列写入另一个文件。我读了它是如何完成但它不起作用的。有人可以帮助我在我的脚本中实现pawk吗?

    j = j + 1   
    #with open('a1_gather_{j}.txt'.format(j=j)) as f2:  
    f2 = open('a1_gather_{j}.txt'.format(j=j), 'w')
        k=k+1
        print k 
        f1 = open('a1_{k}'.format(k=k))
        # with open('a1_{k}'.format(k=k), 'a') as f1:
        lines = f1.readlines()
        for i, line in enumerate(lines):
            print i
            if line.startswith(searchquery):
                f2.write(line)
                f2.write(lines[i + 1])
                f2.write(lines[i + 2])
                i = i+1
            else :
                i = i+1
        #os.close(f1)
        f1.close()

# awk '{a[FNR]=a[FNR]?a[FNR]" "$2:$2}END{for(i=1;i<=length(a);i++)print a[i]}' *

f2.close()

我更喜欢f = open而不是with open,以避免错误IOError: (9, 'Bad file descriptor')

要读取的文件有1000行和2列。我只需要将每个文件的第二列写入另一个文件。

有人可以更正我的脚本并说明如何使用pawk?

3 个答案:

答案 0 :(得分:1)

对于此特定任务,您可以完全放弃python,而是使用cut命令:

cut -f2 a1_{1..10}.txt > a1_gather.txt

默认情况下,它使用制表符作为列分隔符,-d选项可让您更改它。

{start..stop}表示法可以更好地控制匹配的文件。

答案 1 :(得分:0)

假设您需要将a1_*个文件中的第二列写入a1_gather文件并使用 awk ,如评论中所述,您可以在终端中运行简单命令:

cat a1_* | awk '{print $2}' > a1_gather

其中:

  • cat a1_*代表文件名以a1_
  • 开头的每个文件中的
  • awk '{print $2}'表示打印第二列
  • > a1_gather 并将其保存到文件a1_gather

如果您将来更有兴趣使用awk,this is really useful tutorial可以学习。

答案 2 :(得分:0)

f2 = open('a1_gather_{j}.txt'.format(j=j), 'w')
   f1 = open('a1_{k}.txt'.format(k=k))
   lines = f1.readlines()
   for i, line in enumerate(lines):       
       print(repr(line))                
       f2.write(line)
       i = i+1
   f1.close()
f2.close()

这一行读写整行。我也可以使用它,但任何关于知识的建议如何只能读取和写入第二列是受欢迎和欢迎。