如果列小于X,linux合并行

Pra*_*yag 5 linux merge awk row sed

我需要您支持创建输出。我的输出为

1  ABC  STATUS       
   7    PROHIBITED   
   8    PROHIBITED   
2  CDE  STATUS       
   7    PROHIBITED   
   8    PROHIBITED   
3  FGH  STATUS       
   142  PROHIBITED   
2  HIJ  STATUS       
   7    PROHIBITED   
Run Code Online (Sandbox Code Playgroud)

我正在努力实现

`1  ABC  STATUS      7      PROHIBITED   8      PROHIBITED   
2  CDE  STATUS       7    PROHIBITED   8    PROHIBITED   
3  FGH  STATUS       142  PROHIBITED   
2  HIJ  STATUS       7      PROHIBITED
Run Code Online (Sandbox Code Playgroud)

或者在下面的空白处填充第一列和第二列。

`1  ABC  STATUS      
1  ABC   7      PROHIBITED   
1  ABC   8      PROHIBITED   
2  CDE  STATUS       
2  CDE   7    PROHIBITED   
2  CDE  8    PROHIBITED   
3  FGH  STATUS       
3  FGH   142  PROHIBITED   
2  HIJ  STATUS       
2  HIJ    7     PROHIBITED   
2  HIJ    8     PROHIBITED   `
Run Code Online (Sandbox Code Playgroud)

到目前为止,我试图在一行中实现这一目标

cat file | paste -sd'\t\n'
Run Code Online (Sandbox Code Playgroud)

但它没有显示预期的结果。如果有人能为我提供有关如何实现目标的指导,我将不胜感激

mar*_*rkp 2

awk生成第一组输出的一个想法:

awk '
    { if (NF==3)
         printf "%s%s",(NR>1 ? "\n" : ""),$0        # if not 1st row of input then prefix the output with "\n" (to terminate previous line of output)
      else      
         printf "%s",$0
    }
END {print ""}                                      # terminate last line of output
' file
Run Code Online (Sandbox Code Playgroud)

这会生成:

1  ABC  STATUS   7    PROHIBITED   8    PROHIBITED
2  CDE  STATUS   7    PROHIBITED   8    PROHIBITED
3  FGH  STATUS   142  PROHIBITED
2  HIJ  STATUS   7    PROHIBITED   8    PROHIBITED
Run Code Online (Sandbox Code Playgroud)