linux merge rows if Columns less than X



我需要您在创建输出时提供支持。输出为

1  ABC  STATUS       
7    PROHIBITED   
8    PROHIBITED   
2  CDE  STATUS       
7    PROHIBITED   
8    PROHIBITED   
3  FGH  STATUS       
142  PROHIBITED   
2  HIJ  STATUS       
7    PROHIBITED   

我正在努力实现

`1  ABC  STATUS      7      PROHIBITED   8      PROHIBITED   
2  CDE  STATUS       7    PROHIBITED   8    PROHIBITED   
3  FGH  STATUS       142  PROHIBITED   
2  HIJ  STATUS       7      PROHIBITED

OR

`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   `
到目前为止,我已经尝试用 在一行中实现这一点
cat file | paste -sd'tn'

,但没有显示预期的结果。如果有人能给我提供指导,我将不胜感激。

生成第一组输出的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

由此产生:

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

使用任何POSIX awk都可以测试一行是否以空格开头:

$ awk '{printf "%s%s", (/^[[:space:]]/ ? "" : sep), $0; sep=ORS} END{print ""}' file
1  ABC  STATUS          7    PROHIBITED      8    PROHIBITED
2  CDE  STATUS          7    PROHIBITED      8    PROHIBITED
3  FGH  STATUS          142  PROHIBITED
2  HIJ  STATUS          7    PROHIBITED

使用您显示的示例和尝试,请尝试遵循GNUawk代码。

awk -v RS='(^|n)[0-9]+' -v OFS="t" '
RT && FNR>1{
gsub(/n/,"")
$1=$1
print
}
END{
if($0){
gsub(/^ +|n/,"")
$1=$1
print
}
}
'   Input_file

这可能适合您(GNU sed):

sed '/^S/{:a;x;s/n//gp;d};H;$!d;ba' file

将记录存储在保持空间中,在新记录的开头或文件的末尾,交换回保持空间,删除所有换行符并打印。

注意:新记录由行首的非空白字符指定。

如果要连接的行总是以空格开头,就像在示例输入中一样,那么sed解决方案可以是

sed -e :a -e '$!N;s/n([[:blank:]])/1/;ta' -e 'P;D' file

相关内容

最新更新