awk를 사용하여 파일의 n번째 열을 인쇄하는 방법은 무엇입니까?

awk를 사용하여 파일의 n번째 열을 인쇄하는 방법은 무엇입니까?

비슷한 데이터(input1, input2 등)가 있는 n개의 파일이 있고 이 파일의 두 번째 열(호출)을 포함하는 새 파일을 만들고 싶습니다. 내가 사용한다면

awk '{print $2}' input{1..n} >> out

그런 다음 입력 파일의 두 번째 열에 있는 모든 항목이 포함된 열을 얻습니다. $1in out = input1, in out = input2, out = input3, ...., out = inputn과 같이 다양한 파일에 대해 서로 다른 열을 설정하려면 어떻게 해야 합니까 ?$2$2$2$3$2$n$2

답변1

BEGIN다음 명령문을 사용하여 명령문에서 모든 작업을 수행할 수 있습니다.getline

awk '
  BEGIN {
    while(1) {
      line = sep = ""
      for (i = 1; i < ARGC; i++) {
        if ((getline < ARGV[i]) <= 0) exit
        line = line sep $2
        sep = OFS
      }
      print line
    }
  }' input{1..n} > out

답변2

paste두 번째 열을 모두 합치는 명령을 작성할 수 있습니다 .

cmd="paste"
for x in input{1..n}; do
   cmd="$cmd <(awk '{print \$2;}' $x)"
done
echo $cmd
eval $cmd

답변3

pr저는 데이터를 열화하도록 설계된 이 도구를 사용하겠습니다 .

awk '{print $2}' input{1..n} | pr -t --columns=n > out

이는 각 파일의 행 수가 동일하다고 가정합니다.

답변4

이것을 사용우편 엽서 참조

awk '{a[FNR] = a[FNR]" " $2}END{for(i=1;i<=FNR;i++) print a[i]}' input{1..n}

배열은 서로 다른 파일의 각 줄을 보유합니다.

FNR 현재 입력 파일에서 읽은 레코드 수. 각 파일 시작 부분에서 0으로 설정됩니다.

END{for(i=1;i<FNR;i++) print a[i]} 

파일 끝에 배열 a의 내용을 인쇄합니다.

관련 정보