是否可以使用awk执行以下操作?
我有两个矩阵,例如;
文件1,两个变量
1 red big
2 blue small
3 yellow big
4 grey big
5 black small
文件2,两个变量:
1 yellow 17
2 red 22
3 blue 15
4 violet 32
我想获得:
1 red big 22
2 blue small 15
3 yellow big 17
4 grey big
5 black small
6 violet 32
我试过这个:awk 'NR==FNR {h[$2] = $3; next} {print $1,$2,$3,h[$2]}' File 2 File 1 > File 3
虽然它不包含第二个文件的变量。
答案 0 :(得分:1)
您现有的代码完成了一半的工作。您输入的代码如下:
1 red big 22
2 blue small 15
3 yellow big 17
4 grey big
5 black small
您不包括的内容是file2中存在的条目,但是文件1中缺少这些条目。尝试一下:
awk 'NR==FNR {h[$2] = $3; next}{print $1,$2,$3,h[$2];delete h[$2]}END{for (i in h) print i,h[i]}' file2 file1
在这种情况下,输出将是:
1 red big 22
2 blue small 15
3 yellow big 17
4 grey big
5 black small
violet 32
然后您需要决定在“孤儿”条目前应用的号码。 您可以应用4紫罗兰32,因为4是文件2中的$ 1,或者您可以在所有条目中应用全局增量计数:
awk 'NR==FNR {h[$2] = $3; next}{print ++c,$2,$3,h[$2];delete h[$2]}END{for (i in h) print ++c,i,h[i]}' file2 file1
在这种情况下输出将是:
1 red big 22
2 blue small 15
3 yellow big 17
4 grey big
5 black small
6 violet 32
答案 1 :(得分:0)
以下是使用join
进行加入,sort
进行排序,处理替换以及使用nl
对行进行编号的方法:
$ nl <(join -a 1 -a 2 <(cut -d \ -f 2- file1 | sort) <(cut -d \ -f 2- file2|sort))
1 black small
2 blue small 15
3 grey big
4 red big 22
5 violet 32
6 yellow big 17