awk에서 문자열을 사용하여 열 번호 결정

awk에서 문자열을 사용하여 열 번호 결정

다음과 같이 파이프로 구분된 파일이 있다고 가정해 보겠습니다.

|Sr|Fruits|Colors|
|1 |apple |red|
|2 |orange |orange
|3 |grapes |purple|

여기서는 분명히 "과일" 및 "색상" 열이 사용 awk됩니다 . $2$3

나중에 열의 순서가 변경되면 문자열을 사용하여 열 번호를 확인할 수 있나요?

색상이고$3과일$2?

답변1

약간 투박하게 느껴지지만 항상 다음 코드 줄을 사용하여 열 번호를 찾습니다.

head -1 file | sed 's/delimiter/\n/g' | nl
여기에서는 파일의 헤더 라인을 가져와서 sed파이프를 통해 \n 구분 기호로 바꿉니다. 결과적으로 각 열 머리글은 이제 새 줄에 표시됩니다. 마지막으로 nl원래 열 번호에 해당하는 행 번호로 파이프합니다 .

답변2

당신은 시도 할 수 있습니다:

$ awk -F'|' '
{
  for(i=1;i<=NF;i++) {
    if($i == "Fruits")
      printf("Column %d is Fruits\n", i-1)
    if($i == "Colors")
      printf("Column %d is Colors\n", i-1)
  }
  exit 0
}
' file
Column 2 is Fruits
Column 3 is Colors

실제 열은 다음과 같습니다.과일그리고색상$3그리고 $4.

답변3

아마도 첫 번째 행에 있는 모든 열을 인쇄하여 이 두 필드를 검사할 뿐만 아니라 새 열, 해당 이름, 순서 변경 등도 감지할 수 있도록 하는 것이 더 나을 것입니다.

awk -F'|' ' { for (i = 1; i <= NF; ++i) print i, $i; exit } ' file

산출:

1
2 Sr
3 Fruits
4 Colors
5

답변4

또 다른 가능성은 필드 구분 기호를 |레코드 구분 기호로 처리한 다음 첫 번째 행을 처리하는 것입니다.

colnum.awk에서:

BEGIN {
  RS = "|" 
}
/^Fruits$|^Colors$/ {
  print $0, NR - 1
}
$ head -n1 fruits.txt | awk -f colnum.awk
Fruits 2
Colors 3

관련 정보