首先,谢谢大家提前帮助!我一直在学习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,但我们还没有在课程中学到这一点。
再次,先谢谢你。我真的很期待从每个人的经验中学习。
答案 0 :(得分:0)
为什么认为使用sed
会效率低下?当然,管道grep
到sed
会出错,但sed
非常好。您还没有真正定义问题,但假设您可以通过字符串--
的存在来区分标题,您可以这样做:
sed -n -e '/--/s/[^-]*$//p' input > output
这会占用包含--
的所有行,并将所有内容输出到最终-
。如果您只想打印第一行:
sed -n -e '/--/{s/[^-]*$//p;q;}' input > output