Awk 打印第二列有数字的行

Awk 打印第二列有数字的行,awk,sed,Awk,Sed,这是我的数据-我有1000多行。如何仅获取包含数字的rec Records | Num 123 | 7 Y1 91 7834 | 7PQ34-102 AB12AC|87 BWE 67 5690278| 80505312 7ER| 998 输出必须是 7ER| 998 5690278| 80505312 我是linux编程新手,任何帮助对我都非常有用。谢谢大家我会使用awk: awk -F'[[:space:]]*[|][[:space:]]*' '$2 ~ /^[[:digit:

这是我的数据-我有1000多行。如何仅获取包含数字的rec

Records | Num

123 | 7 Y1 91

7834 | 7PQ34-102

AB12AC|87 BWE 67

5690278| 80505312

7ER| 998
输出必须是

7ER| 998

5690278| 80505312

我是linux编程新手,任何帮助对我都非常有用。谢谢大家

我会使用
awk

awk -F'[[:space:]]*[|][[:space:]]*' '$2 ~ /^[[:digit:]]+$/'
如果您想打印在评论中要求删除的行数,您可以使用以下方法:

awk -F'[[:space:]]*[|][[:space:]]*' '
    {
        if($2~/^[[:digit:]]+$/){print}else{c++}
    }
    END{printf "%d lines deleted\n", c}' file

一个简短的GNU
awk
gawk
)脚本,用于过滤第二列(字段)中带有数字的行,假设为一个单词字段(例如
1234
,或
12AB
):

我们使用,即
\y
来匹配单词边界。除此之外,非常简单:我们在
|
上拆分字段,并在第二个字段中查找孤立的数字

编辑:由于问题已更新,现在明确允许在第二个字段中使用多个单词(例如
12 AB
12-34
12 34
),以获取第二个字段中仅带有数字和分隔符的行

awk -F'|' '$2 ~ /^[- 0-9]+$/' file
或者,如果我们说第二个字段中只禁止字母,我们可以使用:

awk -F'|' '$2 ~ /^[^a-zA-Z]+$/' file

如何在linux/unix中仅打印第二列的数字<代码>7ER不在第二位column@RomanPerekhrest标题有误导性,因此我将其更改为
grep
解决方案:
grep-P.+\s*?\\\s*\d+$”
,因为基于列的筛选
awk
是最合适的工具。如何将列分隔?通过管道,或通过空格,或两者兼而有之?@PS:更具可移植性的是
grep'.[:space:][]*[:digit:][]\{1,\}$'
谢谢你的回答。我没有得到任何结果。我需要输出文件中的列和除“非num”zipcodes之外的列。您好,我将
$3
编辑为
$2
,希望它能交给您审阅和批准,但结果是它是自动批准的。如果你不这么想,就把零钱收起来。好极了!太棒了。我很高兴按照您的解决方案得到正确的结果。我非常感谢你。我真的真的真的希望一切顺利。那么快乐吧now@PS.
$2
将是
|
@user71597:可能最容易减去:
expr$(wc-l
谢谢!如果有问题,第二列包含“87 BWE 67”之类的数据,上面的命令不会忽略这些数据。有没有办法解决这个问题?我已经更新了答案,以反映你修改和更新的问题。第二个和第三个表达式将过滤掉
12 aB 34
,但会通过
123-456
。您好,如何从同一数据的第二列中删除那些不是5个连续数字的字段。我回答了你第二个问题,看一看。
awk -F'|' '$2 ~ /^[^a-zA-Z]+$/' file