将文件的第一行添加到同一文件其余部分的每一行之前

将文件的第一行添加到同一文件其余部分的每一行之前

我想从文件中取出第一行并将其放在其余每一行的开头。例如,我该如何转换:

black
widow
card
Friday
berry

进入这个?:

black: widow
black: card
black: Friday
black: berry

是否可以在不显式创建额外文件和变量的情况下执行此操作?

答案1

通过简单的awk命令你就可以做到:

awk 'NR == 1 {a=$0;next} { printf("%s: %s\n",a,$0)}' file_name

答案2

这可能不是最好的在 sed 中执行此操作的方法,但是:

$ sed '1{h;d;}; G; s/\(.*\)\n\(.*\)/\2: \1/' file
black: widow
black: card
black: Friday
black: berry

解释:

  • 1{h;d;}对于第一行,复制模式空间以保留空间,然后删除
  • G将换行符附加到模式空间的内容,然后将保留空间的内容附加到模式空间的内容。现在,我们在模式空间中有正确的两个单词,但顺序错误且分隔符错误(\n而不是:
  • s/\(.*\)\n\(.*\)/\2: \1/'交换换行符之前和之后的部分,用冒号和空格替换换行符

相关内容