csvファイルで使用したいipaddress.txt入力ファイルを含むbashスクリプトがあります。 IPを見つけてA列(現在)の値を表示したいです。 2つまたは3つの列を表示したい場合があります。私が使用しているスクリプトは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
}
}