在标题后打印文件中的第二个字段。

时间:2013-03-07 12:26:21

标签: linux bash shell awk

我有一个文件具有以下结构的场景:

This is the list of all the employees and their desk numbers
Please dont exchange the chairs or drawers
Handle the furniture around with care
Name    Desk No
----    -------
Joe     445
May     560
Sue     669

我只需要获得桌面号码。我正在考虑使用----作为过滤器,并在后面的文本后打印第二列。有更好的解决方案吗?

4 个答案:

答案 0 :(得分:4)

另一种方法:

$ awk 'p{print $2}$1=="----"{p=1}' file
445
560
669

这使用变量p作为打印标志(默认值为零)。只有当我们将print $2设置为非零值时,才会执行块p。在看到第一个字段为p的行后,我们设置----

答案 1 :(得分:2)

如果文件始终具有相同的标题(至少相同的行数),则可以从特定行开始打印:

awk 'NR>=6 {print $2}' file_name

将从第6行打印到结束。然后我们打印第二条记录。

答案 2 :(得分:1)

以下是sed实现:

sed -n '/^----/,${/----/!s/[^ ]* *//p}' file.txt

说明: 从以----开头到文件结尾的第一行,删除第一个字段,打印该行的所有其他内容。

答案 3 :(得分:0)

一个简单的grep怎么样?

$ grep -o "[0-9]\+" input
445
560
669