在第三个单词

时间:2018-04-19 13:38:51

标签: python bash

我需要在第三个文件后删除文件中的所有内容。我不知道如何编写这个脚本,可以是bash或python。

该文件如下所示:

ssessment   assay   5.83    8   10  5   6   4   5   7   3
incubate    breed   6.40    10  6   10  5   7   4   7   7
incubate    develop 7.20    7   7   8   6   7   7   9   10

脚本后面的文件应该是

ssessment   assay   5.83
incubate    breed   6.40
incubate    develop 7.20

4 个答案:

答案 0 :(得分:2)

使用简单的迭代。

<强>演示:

with open(filename, "r") as infile:                             #Read file
    data = [line.split()[:3] for line in infile.readlines()]    #Using list slicing to get only the required 3 elements 

with open(filename, "w") as outfile:                            #Write File
    for i in data:
        outfile.write("{0}\n".format(" ".join(i)))

答案 1 :(得分:1)

这是一项简单的awk任务:打印前三个字段。假设选项卡(\t)是字段分隔符:

awk -F '\t' -v OFS='\t' '{print $1, $2, $3}' file.txt
  • -F '\t'将输入字段分隔符设置为标签

  • -v OFS='\t'将输出字段分隔符设置为标签

  • {print $1, $2, $3}打印由OFS分隔的前三个字段(我们已将其定义为标签)

另一方面,如果字段是空格/空格分隔,并且您希望它们在输出中以空格分隔,则这非常简单,因为awk默认情况下将空格作为输入字段分隔符:< / p>

awk '{print $1, $2, $3}' file.txt

答案 2 :(得分:1)

你可以在bash中使用awk执行此操作,但在python中它也很简单。读入行,将它们拆分为空白(这是默认值)并写出结果。如果你需要保留空格,那么这段代码就可以了:

lines = open(file_name, 'r').readlines()
output = open(output_file_name, 'w')
for line in lines:
    contents = ''.join(line.split(' '))
    item_ctr=0
    for item in contents:
        if item != '':
            item_ctr += 1
            output.write(item+' ')
            if item_ctr == 3:
                break
        else:
            output.write(' ')
    output.write('\n')
output.close()

答案 3 :(得分:1)

当我看到这个问题时,我首先提出了这个问题:

awk 'NF=3' file

如果您希望输出内容由TAB分隔:

awk 'NF=3' OFS="\t" file