删除第一列包含小写字母

时间:2018-02-08 14:04:49

标签: bash awk sed grep

正如标题所说,我想从我的文件中删除第一列在任何位置包含小写的行。说,我有一个这样的文件:

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

3 个答案:

答案 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