sed还是cut?我如何只从文件中获取列标题?

时间:2014-02-14 04:28:01

标签: regex shell unix sed ksh

首先,谢谢大家提前帮助!我一直在学习Unix,并且在最近的家庭作业之前一直很好。

我正在试图找出在我的家庭作业中接近这个特定部分的最佳方法。

我有一个头文件,我必须将其分成两个单独的文件。这部分任务分为两部分:

首先,文件的前两行进入一个文件。我这样做了:

head -2 headers > file1

但是,下一个请求是采用两个列标题(--Regular--和--Overtime--)并将它们放入另一个文件中...这就是我遇到的问题。

头文件如下所示:

Merry Land Training Academy
Pay Report
Week of June 12, 1999

                --Regular---    --Overtime--    Gross   Net
Employee        Hours   Rate    Hours   Rate    Pay     Pay

我知道grep只能匹配包含该模式的行,但是如何在最后两个之后删除字符 - 在加班时间?

例如,我的grep将返回以下内容:

egrep 'Regular' headers

            --Regular---    --Overtime--    Gross   Net 

我知道在执行grep删除单词后我可以手动执行sed替换“Gross”和“Net”,但我知道这样效率很低。

此命令将成为脚本的一部分,该脚本将包含许多其他进程(到目前为止我能够执行此操作)。

在我的在线研究中,我知道很多人建议使用awk,但我们还没有在课程中学到这一点。

再次,先谢谢你。我真的很期待从每个人的经验中学习。

1 个答案:

答案 0 :(得分:0)

为什么认为使用sed会效率低下?当然,管道grepsed会出错,但sed非常好。您还没有真正定义问题,但假设您可以通过字符串--的存在来区分标题,您可以这样做:

sed -n -e '/--/s/[^-]*$//p' input > output

这会占用包含--的所有行,并将所有内容输出到最终-。如果您只想打印第一行:

sed -n -e '/--/{s/[^-]*$//p;q;}' input > output