
저는 지난 한 달 동안 Linux와 상대적으로 기본적인 모든 명령을 배우기 시작했지만 Grep 명령에 몇 가지 문제가 있습니다. 현재 Grep 명령을 사용하여 지정된 두 숫자로 시작하는 숫자 문자열에 대해 CSV 파일의 한 열만 검색하는 방법에 대해 고민하고 있습니다. 특히 우편번호가 "48"로 시작하는 행을 나열하려고 합니다. 이 경우에는 CSV 파일의 7열에 포함되어 있습니다. 각 행에는 다른 숫자 데이터가 있으므로 "공급자" 열에서만 Grep 명령을 사용해야 합니다. 나는 한동안 이 문제를 해결하려고 노력해 왔고 내가 해야 할 일을 약간 지나치게 생각하고 있는 것 같기 때문에 나를 올바른 방향으로 안내하는 데 도움을 주시면 매우 감사하겠습니다.
다음은 제가 사용하는 CSV 데이터의 예입니다.
Provider Hospital Total Discharges Average Covered Charges
49444 MI - Muskegon 53 18694.9
49007 MI - Kalamazoo 40 20494.25
48075 MI - Royal Oak 14 20386.28
48124 MI - Dearborn 34 34338.47
답변1
grep
필드나 열에 대한 개념이 없으므로 이를 달성하려면 스키마를 작성해야 합니다. 일반적인 경우 보기 흉해 보이지만, 예제에서 알 수 있듯이 원하는 숫자가 줄의 시작 부분에 있으면 충분히 간단합니다.
grep -Ee '^[[:space:]]*48[0-9]+[[:space:]]' file
그러면 공백, a 4
, an , 기타 숫자 및 공백 문자로 8
시작하는 줄을 찾습니다.
특정 영역의 경우 awk
결과가 더 좋습니다. 기본적으로 모든 공간의 행을 필드로 분할합니다. 첫 번째 필드에 48
다른 숫자가 포함된 행을 찾습니다 .
awk '$1 ~ /^48[0-9]+$/' file
$1
다른 필드를 사용하려면 또는 $7
다른 것으로 변경하세요 .
답변2
파일 이름이 다음과 같다고 가정해 보겠습니다 test.csv
.
grep -E "48[0-9]{3}" test.csv
grep -E 정규식을 사용하여 문자열 검색
48은 필요한 시작 번호입니다.
[0-9]는 0에서 9 사이의 숫자이고, {3}은 3번을 의미합니다.