我有一个文件具有以下结构的场景:
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
我只需要获得桌面号码。我正在考虑使用----
作为过滤器,并在后面的文本后打印第二列。有更好的解决方案吗?
答案 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