正如标题所说,我想从我的文件中删除第一列在任何位置包含小写的行。说,我有一个这样的文件:
Ar MA0007.3 3051 2.62674e-220 OVER 0 OVER 0.749924 0.0797918 0.6897 0.682167 -0.0615 [13,23] 1
NR3C1 MA0113.3 3051 6.79534e-208 OVER 0 OVER 0.759705 0.0819166 0.699595 0.686309 -0.0665 [13,23] 0.269309
NR3C2 MA0727.1 3051 7.09295e-206 OVER 0 OVER 0.754749 0.0821368 0.694756 0.681845 -0.067 [13,23] 0.0756584
FOXA1 MA0148.3 3051 5.53402e-91 OVER 0 OVER 0.860904 0.0640026 0.827295 0.792912 -0.0303 [-3,7] 1
Foxa2 MA0047.2 3051 3.00085e-87 OVER 0 OVER 0.864018 0.065624 0.83031 0.796327 -0.0223 [1,11] 1
FOXP1 MA0481.2 3051 3.11057e-79 OVER 0 OVER 0.843207 0.0698783 0.809315 0.779508 -0.0375 [16,26] 1
FOXL1 MA0033.2 3051 1.60328e-77 OVER 0 OVER 0.925715 0.0677064 0.892118 0.854536 -0.1102 [-2,8] 1
FOXO6 MA0849.1 3051 8.95861e-73 OVER 0 OVER 0.892953 0.0741376 0.858344 0.824513 -0.0954 [13,23] 1
FOXK1 MA0852.2 3051 2.82502e-72 OVER 0 OVER 0.820987 0.0652885 0.790887 0.76394 -0.0325 [2,12] 1
我想要打印的是:
NR3C1 MA0113.3 3051 6.79534e-208 OVER 0 OVER 0.759705 0.0819166 0.699595 0.686309 -0.0665 [13,23] 0.269309
NR3C2 MA0727.1 3051 7.09295e-206 OVER 0 OVER 0.754749 0.0821368 0.694756 0.681845 -0.067 [13,23] 0.0756584
FOXA1 MA0148.3 3051 5.53402e-91 OVER 0 OVER 0.860904 0.0640026 0.827295 0.792912 -0.0303 [-3,7] 1
FOXP1 MA0481.2 3051 3.11057e-79 OVER 0 OVER 0.843207 0.0698783 0.809315 0.779508 -0.0375 [16,26] 1
FOXL1 MA0033.2 3051 1.60328e-77 OVER 0 OVER 0.925715 0.0677064 0.892118 0.854536 -0.1102 [-2,8] 1
FOXO6 MA0849.1 3051 8.95861e-73 OVER 0 OVER 0.892953 0.0741376 0.858344 0.824513 -0.0954 [13,23] 1
FOXK1 MA0852.2 3051 2.82502e-72 OVER 0 OVER 0.820987 0.0652885 0.790887 0.76394 -0.0325 [2,12] 1
我正在使用的是:
awk '!/[a-z]/' < file.txt
这会以某种方式遗漏以下行:
NR3C1 MA0113.3 3051 6.79534e-208 OVER 0 OVER 0.759705 0.0819166 0.699595 0.686309 -0.0665 [13,23] 0.269309
NR3C2 MA0727.1 3051 7.09295e-206 OVER 0 OVER 0.754749 0.0821368 0.694756 0.681845 -0.067 [13,23] 0.0756584
有谁可以帮我解决这个问题。
TIA
答案 0 :(得分:1)
关注awk
可能对您有帮助。
awk '$1!~/[a-z]/' Input_file
说明: 如果$1
(第一个字段)不等于/a-z/
,只需在此处查看小写字母然后在此处不提及操作这将执行默认操作,即打印当前行。
答案 1 :(得分:1)
您需要使用$1 ~ /regex/
匹配第一列:
awk '!($1 ~ /[a-z]/)' file
或等效地:
awk '$1 !~ /[a-z]/' file
答案 2 :(得分:1)
grep '^[^a-z]\+\s' file
grep很好。
好吧,POSIX一:grep '^[^a-z]\+[[:space:]]' file