[英]formatting whois results to CSV using BASH and grep
幾個小時以來,我一直在努力解決這個問題,並認為我會來這里尋求幫助。
我有一個日志文件中的 IP 地址的 CSV 文件,我想運行該文件並從中獲取 WHOIS 網絡范圍和公司名稱,然后將結果附加到 CSV 的末尾。
到目前為止,我設法做的是將 whois 結果發送到單獨的 csv
echo ip, company, > result.csv
for ip in $(grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" source.csv); do
whois $ip | grep -i -e 'netrange\|inetnum' -e 'org-name\|orgname' \
| awk 'BEGIN{FS="NetRange:|inetnum:|OrgName:|org-name:"} {print $2","$3}'
|xargs; done >> result.csv
我的挑戰是如何將我的 2 個新列添加回 source.csv? 我試過使用
paste -d, source.csv result.csv
但所有發生的事情是 result.csv 中的值覆蓋了 source.csv 的前幾列
我的 source.csv 看起來像下面這樣
ip address requests number of visits
66.249.90.77 2149 200
66.249.66.1 216 233
我的結果.csv
ip range company
66.249.64.0 - 66.249.95.255 Google Inc.
66.249.64.0 - 66.249.95.255 Google Inc.
我希望我的最終 csv 看起來像
ip requests number of visits ip range company
66.249.90.77 2149 200 66.249.64.0 - 66.249.95.255 Google Inc.
66.249.66.1 2161 233 66.249.64.0 - 66.249.95.255 Google Inc.
如果可能的話,我更願意用 BASH 來完成這個而不是安裝任何 3rd 方工具等。我嘗試過 python 包 ipwhois 但我的 Python 知識遠遠少於我有限的 BASH 知識,所以我放棄了它,以免我繼續浪費時間!
任何幫助深表感謝。
嘗試將它放在一個腳本文件中,並在包含數據文件的目錄中運行它。
#!/bin/bash -ue
# Pattern for spacing characters
sp="[[:space:]]*"
#Pattern for non-spacing characters
nsp="[^[:space:]]+"
# Iterate on each line in the data file
while IFS= read -r line
do
[[ "$line" =~ ^$sp($nsp)$sp($nsp)$sp($nsp)$sp$ ]] || continue
f1="${BASH_REMATCH[1]}"
f2="${BASH_REMATCH[2]}"
f3="${BASH_REMATCH[3]}"
# Extract information from whois
whois_data="$(whois "$f1")"
range="$(grep NetRange <<<"$whois_data" | cut -f2 -d":")"
company="$(grep OrgName <<<"$whois_data" | cut -f2 -d":")"
echo $f1,$f2,$f3,$range,$company
done <"source.csv"
輸出格式為以逗號分隔的字段,在使用range
和company
變量之前應該對它們進行一些修剪(以刪除開頭和結尾的空格),但這應該給你一個想法。
基本上,代碼不會嘗試將兩個文件合並在一起,而是從源文件的每一行中提取字段,執行whois
,從中提取所需的兩個字段,然后將所有五個字段輸出到輸出中,無需中介步。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.