从列中删除“na”并折叠行

从列中删除“na”并折叠行

我想删除带有“na”的行

文件

0.000
0.000
0.055
0.036
0.003
0.002
0.000
0.002
0.002
0.002
0.000
na
na
0.000
0.000
na
0.002
0.002
0.003

输出

0.000
0.000
0.055
0.036
0.003
0.002
0.000
0.002
0.002
0.002
0.000
0.000
0.000
0.002
0.002
0.003

我试图在 R 中执行此操作,但我无法折叠行,只需删除 na

答案1

使用 awk:

awk '!/na/' file > new_file

这 ”!”表示不匹配。 “/na/”指定模式“na”。它们一起表示不匹配包含模式 na 的行。 awk 的默认行为是打印,但您也可以像这样专门告诉它打印(调用 print 函数):

awk '!/na/ {print}' file > new_file

要不打印文件中的空行,请使用此正则表达式。 !/^$/ 这告诉 awk 不要匹配空行。它将从“^”指定的行的开头开始到“$”指定的行的末尾进行匹配,中间没有内容。 “&&”告诉它在计算每一行时使用两个表达式。

awk '!/na/ && !/^$/ {print}' file > new_file

使用 sed:

sed '/na/d' file > new_file

"/d 告诉 sed 删除包含匹配模式 "/na/" 的行

要直接修改源文件,而不需要写入新文件,请使用 sed 的 -i (就地)选项

sed -i '/na/d' file

除了内置 bash 的 bash shell 之外什么都不用:

while read -r line; do [[ ! $line =~ na ]] && echo "$line"; done < file > o; mv o file

使用Python:

with open('file', 'r') as rf:
  with open('out', 'w') as of:
    for line in rf:
      if not "na" in line:
        of.write(line)

与所有其他示例一样,鉴于原始问题中提供的示例输入,这不会留下空行。

$ cat file
0.000
0.000
0.055
0.036
0.003
0.002
0.000
0.002
0.002
0.002
0.000
0.000
0.000
0.002
0.002
0.003

答案2

很简单:

grep -v na file > new_file

答案3

I tried with below 3 methods

1.using awk

command:awk '$0 !~/na/{print $0}' filename

2. using sed

sed -n '/na/!p' filename

3. using python

    #!/usr/bin/python
    import re
    k=open('filename','r')
    a=re.compile(r'[0-9]')
    for i in k:
            if re.search(a,i):
                    print i,

输出

0.000
0.000
0.055
0.036
0.003
0.002
0.000
0.002
0.002
0.002
0.000
0.000
0.000
0.002
0.002
0.003

相关内容