我有一个包含以下内容的输入文件
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
答案 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