簡體   English   中英

bash awk文件比較

[英]bash awk file compare

I have a config
[LogicalUnit1]  UnitInquiry "NFSN00Y5IP51ZL"  LUN0 /mnt/extent0 64MB
[LogicalUnit2]  UnitInquiry "NFSN00N49CQL28"  LUN0 /mnt/extent1 64MB
[LogicalUnit3]  UnitInquiry "NFSNBRGQOCXK"  LUN0 /mnt/extent4 10MB
[LogicalUnit4]  UnitInquiry "NFSNE7IXADFJ"  LUN0 /mnt/extent5 25MB

通過bash腳本讀取,使用awk我解析文件並獲取變量

    awk '/UnitInquiry/ {print $1, $3, $5, $6}' $ctld_config | while read a b c d ; do
        if [ -f $a ]
        then
              ctladm create -b block -o file=$c -S $b -d $a
              ctladm devlist -v > $lun_config
        else
              truncate -s $d $c ; ctladm create -b block -o file=$c -S $b -d $a
        fi

這將在啟動時正確初始化luns,但是如果我添加一個lun然后它將再次重新創建它們,我怎么能比較運行什么,配置什么,只重新初始化那些尚未生效的命令,列出設備

ctladm devlist -v
LUN Backend       Size (Blocks)   BS Serial Number    Device ID       
  0 block                131072  512 "NFSN00Y5IP51ZL  [LogicalUnit1]  
      lun_type=0
      num_threads=14
      file=/mnt/extent0
  1 block                131072  512 "NFSN00N49CQL28  [LogicalUnit2]  
      lun_type=0
      num_threads=14
      file=/mnt/extent1
  2 block                 20480  512 "NFSNBRGQOCXK"   [LogicalUnit3]  
      lun_type=0
      num_threads=14
      file=/mnt/extent4
  3 block                 51200  512 "NFSNE7IXADFJ"   [LogicalUnit4]  
      lun_type=0
      num_threads=14
      file=/mnt/extent5

為什么不把后面添加以下then

ctladm devlist -v | grep -q "$a" && continue

這將

  • 運行顯示當前活動設備的命令
  • 檢查是否已列出要注冊的LogicalUnit名稱,如果是,則...
  • 跳過循環的其余部分。

如果$a (邏輯單元名稱)不是唯一的話,你也可以grep另外,更獨特的標識,例如序列號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM