使用 awk 和 sed 用先前的第一列值替换空白值

sha*_*chi 4 sed awk text-processing

john    math
        science
paul    math
        science
rosy    math
jill    science
rob     math
        science
hary    math
Run Code Online (Sandbox Code Playgroud)

期望的输出:

john    math
john    science
paul    math
paul    science
rosy    math
jill    science
rob     math
rob     science
hary    math
Run Code Online (Sandbox Code Playgroud)

Sun*_*eep 5

使用awk,通过对字段数进行操作

$ awk 'NF==1{print p "\t" $1; next} {p=$1} 1' ip.txt
john    math
john    science
paul    math
paul    science
rosy    math
jill    science
rob     math
rob     science
hary    math
Run Code Online (Sandbox Code Playgroud)
  • {p=$1} 1 对于单字段以外的行,保存第一列并打印该行
  • NF==1{print p "\t" $1; next}如果只有一个字段,则打印前一个字段tab和输入行中的字段。next将跳过其余语句并处理下一行


如果tab分离不起作用,请使用column

$ awk 'NF==1{print p,$1; next} {p=$1} 1' ip.txt | column -t
john  math
john  science
paul  math
paul  science
rosy  math
jill  science
rob   math
rob   science
hary  math
Run Code Online (Sandbox Code Playgroud)