我想删除带有“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