我有一个文件1:
6
3
6
9
2
6
此命令打印结果:
awk 'NR==1{a=$1};$0!=a' file1
3
9
2
现在我有了file2:
6 1 2 3 4 5
3 3 4 4 4 6
6 5 2 2 5 1
9 1 3 5 4 1
2 5 6 4 8 5
6 1 5 2 3 1
我想做同样的事情,但是使用file2。我想打印出结果:
3 3 4 4 5 6
9 5 3 2 8 1
2 5 6 5 3 1
5 4 1
2
我想在awk中这样做。谢谢你的帮助。
答案 0 :(得分:1)
AWK并不适合您正在尝试的操作,因为它是为了一次处理一行,而您尝试在不同行之间上下移动数字。也就是说,这个怪物应该做你想做的事情:
awk 'NR==1{nc=NF;for(i=1;i<=nc;i++)a[i]=$i}{for(i=1;i<=nc;i++){if($i!=a[i]){v[m[i]++,i]=$i;if(m[i]>nl)nl=m[i]}}}END{for(l=0;l<nl;l++){for(i=1;i<=nc;i++){if(l<m[i]){printf("%d ", v[l,i])}else{printf(" ")}}printf("\n")}}'
另一方面,如果您的数字矩阵已被转置,那么这项任务就会简单得多:
awk '{for(i=2;i<=NF;i++)if($i!=$1)printf(" %d",$i);printf("\n")}'