다음과 같은 여러 열이 있는 문서가 있습니다.
,Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13
awk를 사용하여 전체 필드 수와 구분 기호를 확인하면 ,
결과는 다음과 같습니다.
이제 Flag10의 필드 번호를 얻으려면 결과는 다음과 같습니다. 10
awk를 사용하여 이 작업을 어떻게 수행할 수 있나요?
답변1
아래와 같이 하면 됩니다.
awk -F, '{for(i=1;i<=NF;i++)if($i=="Flag10")print i}' file
예:
$ echo ',Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13' | awk -F, '{for(i=1;i<=NF;i++)if($i=="Flag10")print i}'
10
답변2
나는 보통 헤더 이름을 열 번호에 매핑하는 연관 배열을 만듭니다.
awk -F, -v head="Flag10" '
FNR == 1 {for (i=1; i<=NF; i++) col[$i] = i}
{print $col[head]}
' << END
,Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13
10,20,30,40,50,60,70,80,90,100,110,120,130
END
Flag10
100
답변3
awk
내장 기능을 사용하려면 :
awk -F, -v field="Flag10" '{sub(field",.*",field);print split($0,any)}' doc.file
스크립트는 값이 처음 나타난 이후의 모든 내용을 제거한 다음 field
(이 경우 Flag10
) 결과를 쉼표로 구분된 줄로 인쇄합니다. 그 이후에는 모두 삭제했기 때문에 Flag10
남은 필드 수는 검색 패턴의 필드 번호입니다.