【问题标题】:sed or cut? How do I only get column headers from a file?sed 还是 cut?如何仅从文件中获取列标题?
【发布时间】:2014-02-14 04:28:01
【问题描述】:

首先,提前感谢大家的帮助!我在学校一直在学习 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 只能匹配包含该模式的行,但是如何删除最后两个之后的字符 -- 在 Overtime 中?

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

egrep 'Regular' headers

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

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

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

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

再次感谢您。我真的很期待从大家的经验中学习。

【问题讨论】:

  • 你能举一个你的输入文件的例子吗?
  • 剪切怎么样,如果总是在同一个位置。 cut -c1-47 < file
  • @Bill 感谢您的回复!我提到的头文件是输入文件。我正在尝试将 --Regular-- 和 --Overtime-- 列标题放入一个单独的文件中,该文件可以任意命名(对于本示例,可能是 file2)。
  • @BMW - 列标题应位于同一位置。我肯定会在cut上一击。出于某种原因,我并没有真正考虑通过计算角色来进行剪辑。谢谢!我想我应该 egrep 行,保存到临时文件,然后从临时文件中剪切?
  • 如果您使用剪切,请使用字段计数而不是字符计数。并且不要保存到临时文件;只需使用管道。

标签: regex shell unix sed ksh


【解决方案1】:

为什么您认为使用sed 会效率低下?当然,将grep 传递到sed 是错误的,但sed 非常好。您还没有很好地定义问题,但是假设您可以通过字符串-- 的存在来区分标头,您可以简单地这样做:

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

这将获取包含-- 的所有行并输出所有内容,直到最后的-。如果您只想打印第一行:

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

【讨论】:

  • 嗨@William,感谢您的帮助!我很抱歉没有说清楚。我将尝试添加尽可能多的上下文。我并不是说 sed 本身效率低下。正是我想这样做的方式。我会试一试。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 2016-03-04
  • 2018-09-19
  • 2018-04-29
  • 2014-10-19
  • 2021-08-09
  • 2021-02-04
  • 1970-01-01
  • 2015-12-26
相关资源
最近更新 更多