Shell Script第二列为空,在行下粘贴$ 1

时间:2017-11-08 07:00:56

标签: shell unix awk sed grep

我的数据如下:

TEST1         
AAAAA MUTUAL  
BBBBB MUTUAL  
CCCCC MUTUAL  
TEST2         
DDDDD SINGLE  
EEEEE SINGLE  
FFFFF SINGLE  

如何在Unix Solaris中更改Shell脚本?

AAAAA TEST1   
BBBBB TEST1   
CCCCC TEST1   
DDDDD TEST2   
EEEEE TEST2   
FFFFF TEST2   

2 个答案:

答案 0 :(得分:2)

awk 'NF==1{val=$1; next}{ $2 = val}1'  infile

# or

awk 'NF==1{val=$1; next}{ print $1, val }'  infile

如果要在Solaris / SunOS系统上尝试此操作,请将脚本开头的awk更改为/usr/xpg4/bin/awk/usr/xpg6/bin/awknawk

说明:

  • NF==1{val=$1; next}如果记录/行/行中的字段数不等于1,则将第一列保存在变量val

  • next停止处理更多条件,转到下一行

  • { $2 = val}将保存的值设置为第二个字段(因此这里将修改未跳过的行/记录/行)

  • 最后
  • 1执行默认操作,即打印当前/记录/行,打印$ 0。要知道awk是如何工作的,请使用awk'1'infile,它将打印所有记录/行,而awk'0'infile则不打印任何内容。除零以外的任何数字都为真,这会触发默认行为。

答案 1 :(得分:0)

如果有帮助,请您试试并告诉我。

nawk '/^TEST/{val=$0;next} {print $1,val}'  Input_file