awk命令合并同一文件的内容

时间:2014-08-04 06:03:16

标签: bash awk sed

我有一个包含以下内容的输入文件

1 1
2 1
3 289
4 1
5 2 
0   Clear
1   Warning
2   Indeterminate
3   Minor
4   Major
5   Critical

我想将第一种类型的行与第一列的消息合并,然后获取

  1 1 Warning
  2 1 Indeterminate
  3 289 Minor 
  4 1 Major
  5 2 Critical

3 个答案:

答案 0 :(得分:5)

只需使用awk

awk '$1 in a { print $1, a[$1], $2; next } { a[$1] = $2 }' file

输出:

1 1 Warning
2 1 Indeterminate
3 289 Minor
4 1 Major
5 2 Critical

答案 1 :(得分:2)

使用join / sed,sed为每个部分创建文件的不同视图,并在公共字段上加入连接:

join <(sed '/^[0-9]* [0-9]* *$/!d' input) <(sed '/^[0-9]* [0-9]* *$/d' input)

给出:

1 1 Warning
2 1 Indeterminate
3 289 Minor
4 1 Major
5 2  Critical

答案 2 :(得分:2)

您可以使用Awk执行此操作:

awk 'BEGIN{n=0}NR>6{n=1}n==0{a[$1]=$2}n==1{print $1,a[$1],$2}' file

或其他方式:

awk 'NR<=5{a[$1]=$2}$2~/[a-zA-z]+/ && $1>0 && $1<=5{print $1,a[$1],$2}' file