【问题标题】:how to combine awk and sed command together [closed]如何将 awk 和 sed 命令结合在一起[关闭]
【发布时间】:2015-01-23 06:52:27
【问题描述】:

我有两个命令,

awk 'NR%2{printf $0 "      ";next}1' FileName        

sed '1d;' FileName .

我希望这两个命令作为一个命令一起使用。我尝试使用 |格式,它不起作用

示例 IO

输入:

header
1
2
3
4
5

输出:

1   2
3   4
5

【问题讨论】:

  • 你试过什么exactly?发生了什么?你希望什么?请给出预期输入和输出的正确示例。请阅读stackoverflow.com/help/how-to-ask
  • 我有多个栏目。我必须通过忽略文本文件中的页眉和页脚将它们合并在一起。如果我单独使用这些命令,它就可以工作。但是我需要这个作为一个脚本
  • 您在使用 awk 时永远不需要 sed,也永远不会使用 printf $0,否则当 $0 包含格式化字符(例如 %s)时,您会感到非常意外。发布一些示例输入和预期输出。
  • 我在一个文本文件中有多个由空格分隔的列。我需要第二行应该与第一行连接,同样第四行与第三行顺序连接
  • 包括您的示例输入文件和预期输出

标签: shell awk sed


【解决方案1】:
sed '1d;N;s/\n/   /'

在 1 sed 中相同。

  • 1d:如果是输入的第一行,则删除行(您的标题)。 d 之后的 Sed 循环,因此下一条指令被忽略,下一行在新的运行中被处理。
  • N:加载新行(因此在当前缓冲区中,两行之间有一个\n
  • s\n/ /:用几个空格替换新行
  • 此循环的打印结果
  • 重新启动进程,直到下一行文件结束。

【讨论】:

  • 。您的命令运行良好。你能解释一下命令吗
  • 谢谢先生....你能帮我把cos转换成shell脚本吗
  • 我有页眉和页脚。它删除标题。不应对 header 执行该操作。
  • 在post中添加了一个IO示例
【解决方案2】:

为什么不是一个命令?这应该满足我们对awk的要求

awk 'NR>1 && ORS=NR%2==0?"      ":RS' file
1      2
3      4
5     

【讨论】:

  • 如果我使用这个 AWK 命令 olumns 没有正确对齐。锄头来安排它
  • @JimMacaulay 试试:awk 'NR>2 && ORS=NR%2?"\t\t":RS' file。它将使用tab 而不是space
  • @JimMacaulay 更新了我的帖子以跳过第一行并将其放入正确的列。您仍然可以将空格更改为制表符。
【解决方案3】:

这个怎么样?

awk 'NR != 1 && !(NR % 2) {printf $0 "      "; next} 1' FileName | tail +2

【讨论】:

  • 如果我用这个,输出就不一样了......我的secons列也被删除了
  • 您需要显示示例输入和所需的输出。
  • 我不应该删除标题。我需要显示标题,并且 AWK 操作应该只对正文执行
  • @JimMacaulay:好的,我编辑了我的答案,按照你在编辑问题中显示的方式工作。
  • 重点是从输出中删除header。您确实还更改了 OPs 帖子以包含不应出现在输出中的 header
猜你喜欢
  • 2014-08-22
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 2020-02-05
  • 2019-03-15
  • 2014-01-02
  • 2018-12-17
  • 2015-11-04
相关资源
最近更新 更多