입력 IP 주소 파일 및 csv 파일이 포함된 Bash 스크립트

입력 IP 주소 파일 및 csv 파일이 포함된 Bash 스크립트

csv 파일과 함께 사용하려는 ipaddress.txt 입력 파일이 포함된 bash 스크립트가 있습니다. IP를 찾아 A열(현재)의 값을 표시하고 싶습니다. 두 개 또는 세 개의 열을 표시하고 싶을 수도 있습니다. 내가 사용하고 있는 스크립트는 IP를 찾았지만 A열의 값을 인쇄하지 않습니다. 참고 사항: 답변에 도움이 되는 경우 IP 주소 위치는 csv 파일의 열 16 또는 열 P입니다.

#!/bin/bash

# Read input file with IP addresses
input_file="ipaddress.txt"
while IFS= read -r ip_address; do
    # Search for IP address in CSV file
    csv_file="network-data.csv"
    grep -q "$ip_address" "$csv_file"

    # Print result
    if [ $? -eq 0 ]; then
        echo "$ip_address found in $csv_file"
        awk -F, -v "$ip_address"= '$16 == ip { print $1 }' "$csv_file"
    else
        echo "$ip_address not found in $csv_file"
    fi
done < "$input_file"

다음은 출력의 예입니다.

192.168.1.2 found in network-data.csv
awk: fatal: `192.168.1.2' is not a legal variable name
192.168.1.18 found in network-data.csv
awk: fatal: `192.168.1.18' is not a legal variable name
192.168.1.33 not found in network-data.csv
192.168.1.44 not found in network-data.csv
192.168.1.51 found in network-data.csv
awk: fatal: `192.168.1.51' is not a legal variable name

답변1

Bash 대신 AWK를 사용합니다. awk -f awkscript.awk ipaddresses.txt csvfile.csv

BEGIN {
    FS = ","; # Assuming CSV fields are separated by commas
}

# Load the IP addresses from file1 into an array
NR == FNR {
    ips[$0] = 1;
    next;
}

# Now we're working with the CSV file
{
    # The IP address is in the 16th field of the CSV
    if ($16 in ips) {
        print $1, $2; # Print columns 1 and 2
    }
}

관련 정보