다음과 같이 파이프로 구분된 파일이 있다고 가정해 보겠습니다.
|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