打印每行匹配字符串,后跟第一行匹配字符串

  • 本文关键字:字符串 一行 打印 bash awk
  • 更新时间 :
  • 英文 :


>我有这个:

id1
name: Chris
id2
id3
name: John
name: Mary
id4
name: Mike

我需要至少像这样重新排列它:

id1
name: Chris
id2
name: John
id3
name: Mary
id4
name: Mike

但理想情况下是这样的:

id1 name: Chris
id2 name: John
id3 name: Mary
id4 name: Mike

我知道这在awk是可能的,但语法让我无法理解。我试图从其他或多或少类似的解决方案中推断出来,但没有成功。

awk 的替代方案:此解决方案paste两个过程替换。第一个进程返回以id开头的所有行,第二个进程返回所有其他行。列由空格分隔(-d ' '选项)。

$ paste -d ' ' <(grep '^id' infile) <(grep -v '^id' infile)
id1 name: Chris
id2 name: John
id3 name: Mary
id4 name: Mike
awk 'BEGIN{
count=0
}
/name/{
count++;printf "id%d %sn",count,$0
}' your_file_name

应该这样做。

输出

id1 name: Chris
id2 name: John
id3 name: Mary
id4 name: Mike

现在是一个优雅的单行(谢谢@ed-莫顿)

awk '/name/{print "id"++c,$0}' your_file_name
$ awk '!/^name:/{id[++a]=$0;next} {print id[++b], $0}' file
id1 name: Chris
id2 name: John
id3 name: Mary
id4 name: Mike

相关内容

  • 没有找到相关文章

最新更新