作者 主題: shell script一問  (閱讀 3747 次)

0 會員 與 1 訪客 正在閱讀本文。

essle9

  • 懷疑的國中生
  • **
  • 文章數: 80
    • 檢視個人資料
shell script一問
« 於: 2009-04-10 18:22 »
cat file之後的內容如下:
aaa.bbb.ccc=111
ddd.eee.fff=222
       .
       .
       .
xxx.yyy.zzz=???
想把"="之前的"."換成"_",但不能換到"="之後的值

我下了
awk -F= '/.+/{ print $1}' file | sed s/\\./_/g
之後可以達到把前面的"."換掉
但怎麼把後面的值接上去呢??要用到陣列把"="前後的值存起來,中間再加個"="嗎?
或者有較好的方法,不一定要一行....

TyroneYeh

  • 俺是博士!
  • *****
  • 文章數: 2396
  • 性別: 男
    • 檢視個人資料
回覆: shell script一問
« 回覆 #1 於: 2009-04-11 04:54 »
試試這樣先寫個 shell 把下面內容存成一個 test.sh
然後下 sh test.sh file 這樣出來的結果應該是您要的吧
代碼: [選擇]
#!/bin/bash

file=$1

x=0
lns=`wc -l $file`
y=`expr "$lns" : '\([0-9]*\)'`
while [ "$x" -lt "$y" ]
do
        let x=x+1
        line=`head -n $x $file | tail -n 1`
        i=`echo $line | gawk -F= '{print $1}' | sed 's/\\./_/g'`
        j=`echo $line | gawk -F= '{print $2}'`

        echo "$i=$j"
done
--
TyroneYeh

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
回覆: shell script一問
« 回覆 #2 於: 2009-04-11 05:53 »
while read line
do
  n1=$(echo "$line" | cut -d = -f 1)
  n2=$(echo "$line" | cut -d = -f 2-)
  echo "$n1=$n2"
done < filename
I am kenduest - 小州

my website: http://kenduest.sayya.org/