2014-09-10 3 views
1

행렬의 첫 번째 열을 읽고이 첫 번째 열을 참조로 사용하여이 행의 열을 인쇄하고 싶습니다. 그리고 예 :AWK : 첫 번째 열을 참조로 사용하여 행렬을 인쇄하십시오.

mat.txt 
2 10 6 12 3 
4 11 1 22 6 
5 15 3 18 9

참고로 첫 번째 열을 사용하여, 나는 열 2, 4, 5를 얻을, 또한 시작 부분에서 첫 번째 콜 럼의 값을 넣고 싶습니다.

2 10 12 3 
4 11 22 6 
5 15 18 9

나는 이것을 시도하지만 잘 작동하지 않습니다

awk 'FNR==NR{c++;cols[c]=$1;end} 
      {for(i=1;i<=c;i++) printf("%s%s",$(cols[i]+1),i&ltc ? OFS : "\n")}' mat.txt mat.txt 

답변

1

이 할 수

awk 'FNR==NR {a[NR]=$1;next} {printf "%s ",a[FNR];for (i in a) printf "%s ",$(a[i]);print ""}' mat.txt{,} 
2 10 12 3 
4 11 22 6 
5 15 18 9 

{,}이 파일을 두 번 사용합니다.

+0

위대한 Jotne !! [FNR] 트릭을해라 !!! 그리고 {.}도 유용했습니다. 그냥 또 다른 질문입니다. 배열 (참조)을 머리글 (첫 번째 행)으로 인쇄 한 다음 행렬을 인쇄 할 수 있습니까? –

+0

@ ManuelRamón 첫 번째 행에 참조 열을 인쇄하려는 경우 다음을 수행 할 수 있습니다. 'awk'FNR == NR {a [NR] = $ 1; 다음} FNR == 1 {for i in a printf " print ""s ", print ("[i]); print ""}''PS이 'a[FNR]'은 또한''% s ", a [i] a[++j]' – Jotne

+0

+1 화려한! 여러분의 도움과 설명에 감사드립니다. @Jotne –

관련 문제