我有兩個檔案;可以將其視為列;但我只需要提取具有 IP 地址的那個。如果在兩個檔案中都有文本檔案;然后可以保持原樣。我嘗試了“加入”和 awk 但沒有成功。這是輸出和所需的輸出。
FILE1 FILE2 Desired Output (FILE 3)
192.168.217.36 d0:d3:e0:cb:dc:f4 192.168.217.36
192.168.229.70 20:4c:03:59:ed:6a 192.168.229.70
No_IP_Found 192.168.197.181 192.168.197.181
192.168.230.81 192.168.230.81 192.168.230.81
No_IP_Found No_IP_Found No_IP_Found
No_IP_Found 84:d4:7e:cf:5c:9c No_IP_Found
uj5u.com熱心網友回復:
假設:
- 如果兩個檔案都包含 (ipv4) ip 地址,則從
file1 - 兩個檔案的行數相同
- 所有行都包含一個欄位(沒有嵌入空格);否則我們只處理第一個空格分隔的欄位
一個awk想法:
awk '
BEGIN { regex="([0-9]{1,3}.){3}[0-9]{1,3}" } # define the (ipv4) ip address regex
FNR==NR { a[FNR]=$1; next } # 1st file: save field #1, skip to next input line
{ if (a[FNR] ~ regex) print a[FNR] # 2nd file: if 1st file had valid ip address then print it
else if ($1 ~ regex) print $1 # else if 2nd file has valid ip address then print it
else print "No_IP_Found" # else print default
}
' file1 file2
這會產生:
192.168.217.36
192.168.229.70
192.168.197.181
192.168.230.81
No_IP_Found
No_IP_Found
uj5u.com熱心網友回復:
paste因為我很懶所以使用:
paste FILE1 FILE2 |
awk '
{
if (match($0,/[0-9]{1,3}(\.[0-9]{1,3}){3}/))
print substr($0,RSTART,RLENGTH)
else
print "No_IP_Found"
}
'
192.168.217.36
192.168.229.70
192.168.197.181
192.168.230.81
No_IP_Found
No_IP_Found
uj5u.com熱心網友回復:
awk '{$1~/\./?$0=$1:($2~/\./?$0=$2:$0="NO_IP_Found")}1' <(paste FILE1 FILE2)
uj5u.com熱心網友回復:
如果您不關心排序順序,這是一種奇怪的方法,可以過濾掉 ipv6 或 MAC 地址,但不驗證 ipv4 的地址:
{m,g}awk '___[$_] <(NF*=NF==!_) || (__==$_)==(FNR-___[__])' \
__='No_IP_Found' FS=':' file1 file2
192.168.217.36
192.168.229.70
No_IP_Found
192.168.230.81
192.168.197.181
No_IP_Found
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/491692.html
