删除包含小数的行

Delete lines that contain decimal numbers

我正在尝试删除包含小数的行。例如:

82.45 76.16 21.49 -2.775

5 24 13 6 9 0 3 2 4 9 7 11 54 11 1 1 18 5 0 0

1 1 0 2 2 0 0 0 0 0 0 0 14 90 21 5 24 26 73 13

20 33 23 59 158 85 17 6 158 66 15 13 13 10 2 37 81 0 0 0

1 3 0 19 8 158 75 7 10 8 5 1 23 58 148 77 120 78 6 7

158 80 15 10 16 21 6 37 100 25 0 0 0 0 0 3 1 10 9 1

0 0 0 0 11 16 57 15 0 0 0 0 158 76 9 1 0 0 0 0

22 17 0 0 0 0 0 0

50.04 143.84 18.52 -1.792

3 0 0 0 0 0 0 0 36 0 0 0 2 4 0 1 23 2 0 0

8 24 4 12 21 9 5 2 0 0 0 4 40 0 0 0 0 0 0 12

150 11 2 7 12 16 4 59 72 8 30 88 68 83 15 27 21 11 49 94

6 1 1 8 17 8 0 0 0 0 0 5 150 150 33 46 9 0 0 20

28 49 81 150 76 5 8 17 36 23 41 48 7 1 16 88 0 3 0 0

0 0 0 0 36 108 13 9 2 0 3 61 19 26 14 34 27 8 98 150

14 2 0 1 1 0 115 150

114.27 171.37 10.74 -2.245

......这种模式持续了数千行,同样我有大约 3000 个具有类似数据模式的文件。

所以,我想删除包含这些小数的行。在大多数情况下,每第 8 行都有十进制数字,因此我尝试使用 awk 'NR % 8! == 0' < file_name。但问题是,并非数据库中的所有文件都将每 8 行作为十进制数字。那么,有没有一种方法可以删除具有十进制数字的行?我在 python 2.7 中编码 ubuntu。

您可以只查找包含小数限制符的行:

with open('filename_without_decimals.txt','wb') as of:
    with open('filename.txt') as fp:
    for line in fp:
        if line.index(".") == -1: of.write(line)

如果您更喜欢使用 sed,会更干净:

sed -i '/\./d' file.txt

解决方案类似于

file = open('textfile.txt')
text = ""

for line in file.readLines():
    if '.' not in line:
        text += line

print text

你试过这个吗:

使用 awk:

awk '!/\./{print}' your_file
    deci = open('with.txt')
    no_deci = open('without.txt', 'w')

    for line in with_deci.readlines():  
        if '.' not in line:
            no_deci.write(line)

    deci.close()
    no_deci.close()

readlines returns 文件中所有行的列表。