CSV 파일의 한 열만 검색하는 Grep 명령

CSV 파일의 한 열만 검색하는 Grep 명령

저는 지난 한 달 동안 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번을 의미합니다.

관련 정보