awkとsedを使用してスペース値を前の最初の列値に置き換える

awkとsedを使用してスペース値を前の最初の列値に置き換える
john    math
        science
paul    math
        science
rosy    math
jill    science
rob     math
        science
hary    math

希望の出力:

john    math
john    science
paul    math
paul    science
rosy    math
jill    science
rob     math
rob     science
hary    math

ベストアンサー1

を使用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
  • {p=$1} 1単一フィールドではない行の場合は、最初の列を保存して行を印刷します。
  • NF==1{print p "\t" $1; next}フィールドが1つしかない場合は、前のフィールド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

おすすめ記事