填空字段

Odd*_*ish 8 bash excel perl awk sed

我有一个非常大的制表符分隔文件(大约1200万行),如下所示:

F1    1
      2
      700
F2    89
      900
      10000
      19
F3    100
      60001
Run Code Online (Sandbox Code Playgroud)

有什么办法可以让我这样做:

F1    1
F1    2
F1    700
F2    89
F2    900
F2    10000
F2    19
F3    100
F3    60001
Run Code Online (Sandbox Code Playgroud)

我尝试过使用sed脚本,但需要很长时间.

例如

sed 's/^/F1/' FILE | cut -c3- > FILE1 ; mv FILE1 FILE
Run Code Online (Sandbox Code Playgroud)

我可以在excel中使用它

=IF(a2=="",c1,a2)
Run Code Online (Sandbox Code Playgroud)

并拖下来.但Excel只允许我加载一定数量的行.

(假设我已将"F1"复制到C1)

当然,使用awk或sed有一种更简单的方法吗?

ike*_*ami 6

perl -F'\t' -lane'$h = $F[0] ||= $h; print join "\t", @F'
Run Code Online (Sandbox Code Playgroud)

作业是右关联的,所以

$h = $F[0] ||= $h;
Run Code Online (Sandbox Code Playgroud)

相当于

$h = ( $F[0] ||= $h );
Run Code Online (Sandbox Code Playgroud)

因此

$F[0] ||= $h;
$h = $F[0];
Run Code Online (Sandbox Code Playgroud)

$F[0] = $h if !$F[0];
$h = $F[0];
Run Code Online (Sandbox Code Playgroud)


Cyr*_*rus 2

我建议:

awk -F '\t' '{OFS=FS; $1==""?$1=b:b=$1}1' file
Run Code Online (Sandbox Code Playgroud)