>我有这个:
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