2013-01-02 152 views
1

我有幾個包含IP地址的文件。我正在創建一個腳本,並且必須弄清楚如何使用基於它之前創建的文件的IP地址創建一個新的用戶文件。如果最後一個文件包含A.B.C.D的IP,則新文件需要是A.B.C.(D + 4)。在Bash中編輯文件

我想我需要使用「的sed」和「awk的」命令,但一直沒能得到任何工作。我將如何去寫這部分腳本?

+3

會發生什麼,如果'd + 4> 255 '? – kojiro

+0

哈!我問,他們說我們會處理它。公平地說,它會有一段時間纔會達到那麼高的水平。 – fixdrift

+2

這就是Y2K發生的情況。 – kojiro

回答

6

這裏的東西,讓你開始:假設有一個名爲input文件看起來像這樣:

輸入

:中內容 input

127.0.0.1 
127.0.0.2 
127.0.0.3 
127.0.0.200 

您可以在CMDLINE做

awk 'BEGIN{FS=OFS="."} {$4=$4+4; print}' input > output 

說明什麼是在這裏做什麼:

  • awk '...' - 調用AWK,主要用於行由行文件操作的工具,用單引號包圍的東西是awk的指令。
  • BEGIN{FS=OFS="."} - 告訴AWK使用.作爲分隔符的輸入和輸出。 FS代表「字段分隔符」
  • {$4=$4+4; print} - $4就是第四場。由於.是分隔符,因此D對應於第4個字段,我們將整數值4添加到第4個字段。這裏的print只是印刷整條生產線的簡稱。
  • input - 命名輸入文件作爲參數傳遞給AWK;救貓
  • > output - 輸出重定向到一個文件,這樣就可以使得基於其上的用戶文件之前檢查他們的任何問題。

輸出:中output

127.0.0.5 
127.0.0.6 
127.0.0.7 
127.0.0.204 

然後內容可以一次讀取output一行來根據需要創建新的用戶文件,隨着線​​的東西,也許另一個腳本:

while read line 
do 
    echo "this is a user file" > "$line" 
done < output 

(並調整到你的需求)

最後,只要你明白這是怎麼回事在上面,你可以完全跳過output文件,只是做這一切在一個班輪:

awk 'BEGIN{FS=OFS="."} {$4=$4+4; print}' input | while read line; do echo "hello world" > "$line"; done 
+0

謝謝!這幫了我很多,尤其是你的解釋 – fixdrift

+0

@fixdrift很高興幫助! =) –