我有这个:
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
实现,但语法不适用于我。我尝试从其他或多或少类似的解决方案中推断但没有成功。
答案 0 :(得分:3)
替代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
答案 1 :(得分:2)
awk 'BEGIN{
count=0
}
/name/{
count++;printf "id%d %s\n",count,$0
}' your_file_name
应该这样做。
<强>输出强>
id1 name: Chris
id2 name: John
id3 name: Mary
id4 name: Mike
现在优雅的单行(感谢@ ed-morton)
awk '/name/{print "id"++c,$0}' your_file_name
答案 2 :(得分:1)
$ awk '!/^name:/{id[++a]=$0;next} {print id[++b], $0}' file
id1 name: Chris
id2 name: John
id3 name: Mary
id4 name: Mike