使用AWK将非空行$7列值填充至后续空行对应列
解决方案
要实现将非空行的第7列值填充到后续空行的对应列位置,可以使用以下AWK命令:
针对完全空行的场景
如果你的“空行”指的是完全没有内容的行(NF=0),使用这个命令:
awk 'BEGIN {OFS=" "} NF {last7=$7; print; next} {$7=last7} 1' plik
针对第7列缺失的非空行场景
如果需要同时处理字段数不足7的非空行(比如只有前6列,第7列空白),可以用这个更通用的版本:
awk 'BEGIN {OFS=" "} NF >=7 {last7=$7} {if (NF <7) $7=last7} 1' plik
命令解释
BEGIN {OFS=" "}:设置输出字段分隔符为空格,确保输出的列间隔和输入一致,避免AWK默认用单空格替换原有的多空格分隔NF {last7=$7; print; next}(第一个命令):- 当行包含字段(非空行)时,将该行的第7列值存入变量
last7 - 直接打印当前行,然后用
next跳过后续逻辑,避免修改当前行的内容
- 当行包含字段(非空行)时,将该行的第7列值存入变量
{$7=last7} 1:- 对于空行(或字段数不足7的行),将第7列赋值为
last7中保存的最近非空行的第7列值 1是AWK的简写,表示执行默认的打印操作,输出修改后的行
- 对于空行(或字段数不足7的行),将第7列赋值为
NF >=7 {last7=$7}(第二个命令):只要行的字段数≥7,就更新last7的值为当前行的第7列,确保后续行能获取到最新的填充值
示例验证
假设输入文件plik内容如下:
col1 col2 col3 col4 col5 col6 apple colA colB colC colD colE colF colX colY colZ colW colV colU
使用第二个通用命令后,输出会是:
col1 col2 col3 col4 col5 col6 apple colA colB colC colD colE colF apple apple colX colY colZ colW colV colU apple
内容的提问来源于stack exchange,提问作者Tedee12345
相关产品推荐
相关产品推荐

