AWK-根据“删除”删除相同字段$1“;

AWK-根据“删除”删除相同字段$1“;,awk,Awk,我有一个文件1: 6 3 6 9 2 6 此命令打印结果: awk 'NR==1{a=$1};$0!=a' file1 3 9 2 3 3 4 4 5 6 9 5 3 2 8 1 2 5 6 5 3 1 5 4 1 2 现在我有文件2: 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。我想打印出结果:

我有一个文件1:

6 
3 
6 
9 
2 
6
此命令打印结果:

awk 'NR==1{a=$1};$0!=a' file1
3 
9 
2
3 3 4 4 5 6 
9 5 3 2 8 1 
2 5 6 5 3 1 
    5 4   1 
      2
现在我有文件2:

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。我想打印出结果:

awk 'NR==1{a=$1};$0!=a' file1
3 
9 
2
3 3 4 4 5 6 
9 5 3 2 8 1 
2 5 6 5 3 1 
    5 4   1 
      2

我想用awk做这件事。谢谢您的帮助。

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'NR==1{nc=NF;用于(i=1;我感谢您的帮助。第一个示例几乎很好。只在字段$1前打印不必要的空格,并在文件末尾打印一个空行。第二个示例不起作用。@Tedee12345-我现在已经更新了第一行。如果您阅读了我写的内容,您将看到第二行不适用于您的案例,它将不起作用如果您交换了文件中的行和列(即转置),则返回rk。现在第一个示例起作用了。对我来说,这有点复杂。谢谢。如果您不再寻找答案,请记住通过接受来结束问题。