从第一行填补空行
问题描述:
我有选项卡DELIM文件中像如下:从第一行填补空行
a 12 17 bac 30 42
a 15 18
a 18 22
我想重复列BAC 30 42剩余的行喜欢如下:
a 12 17 bac 30 42
a 15 18 bac 30 42
a 18 22 bac 30 42
我试过以下命令awk '{$4=$4; $5=$5;$6=$6; print}' file.txt
,但它没有对文件做任何修改。我怎样才能在awk中实现这一点。
答
一个正确的解决方案FWIW:
$ awk 'NR==1{n=split($0,d)} {for (i=1;i<=n;i++) printf "%s%s", (i>NF ? d[i] : $i), (i<n ? OFS : ORS)}' file
a 12 17 bac 30 42
a 15 18 bac 30 42
a 18 22 bac 30 42
什么是这里的逻辑是什么?复制第一行倒数第二列和最后一列,如果有一些丢失?这总是如此,或者可能发生只有一列丢失? – fedorqui
@fedorqui我只是想复制“bac 30 42”并在没有值的地方填充后续行。 – Carol
说真的 - 你有** GOT **阅读Arnold Robbins编写的第4版Effective Awk Programming。你所问的问题是绝对基本的,你试图做的事情希望能够解决你的问题(你认为'$ 4 = $ 4'会将$ 4'设置为它在赋值之前没有的值]显示你完全不知道awk语法或语义。不要浪费你的时间把语言结构从帽子里拿出来,希望魔术能够发生,并且只读这本书。 –