亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 11256 | 回復: 8
打印 上一主題 下一主題

請教:如何在AWK中調用shell腳本,并在shell中使用AWK的變量 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2005-03-18 13:48 |只看該作者 |倒序瀏覽
例如:有一文本list

  1. #cat list
  2. aaaa 123456.12 800001
  3. bbbb 654321.22 800002
  4. ccccc 124686554 800003
  5. dddd -45846456.12 800004
復制代碼

希望能生成一個新的文本newlist,效果如下

  1. #cat newlist
  2. aaaa 123,456.12 800001
  3. bbbb 654,321.22 800002
  4. ccccc 124,686,554.00 800003
  5. dddd -45,846,456.12 800004
復制代碼

現有數字處理腳本tho.sh:

  1. #cat sho.sh
  2. if test `echo $1 | grep '\.'`
  3.         then
  4.                 head=`echo $1 | cut -d. -f 1`
  5.                 end=`echo $1 | cut -d. -f 2`
  6.                 total=`echo $head | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'`.$end
  7.         else
  8.                 total=`echo $1 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'`.00
  9. fi
  10. echo $total
復制代碼

腳本使用方法及效果:

  1. #./tho.sh 123456789
  2. 123,456,789.00
復制代碼

打算用AWK調用tho.sh把$2改變后輸出,但在AWK中用system調用tho.sh后不能把$2傳給tho.sh
請多指教,謝謝!!
或者用其他方法實現

論壇徽章:
1
榮譽會員
日期:2011-11-23 16:44:17
2 [報告]
發(fā)表于 2005-03-18 15:12 |只看該作者

請教:如何在AWK中調用shell腳本,并在shell中使用AWK的變量

system("sh urscript"

論壇徽章:
0
3 [報告]
發(fā)表于 2005-03-18 15:27 |只看該作者

請教:如何在AWK中調用shell腳本,并在shell中使用AWK的變量

#對文件中的數字進行格式化,保留小數點兩位,整數部分每三位一分割
#用法:awk -f frm_num.awk 目標文件
#文件名:frm_num.awk  

function format_number(STRING,  str,flag,str1,str2,i,j,array) {
           str=STRING       
       
        if(str ~ /^[-+]/){
                flag=substr(str,1,1)
                str=substr(str,2)
        }else
                flag=""
       
        i=index(str,"\."
        if(i>0){
                str2=substr(str,i+1)
                str1=substr(str,1,i-1)
               
                if(length(str2)>2)
                        str2=substr(str2,1,2)
                else if(length(str2)<2)
                        str2=str2 "0"               
                       
                str2="\." str2               
        } else{
                str1=str
                str2="\.00"
        }
       
        i=0
        while(length(str1)>3){
                array[++i]=substr(str1,length(str1)-2,3)
                str1=substr(str1,1,length(str1)-3)
        }       
        array[++i]=str1
       
        str1=""
        for(j=i;j>0;j--){
                str1=str1 array[j]
                if(j>1) str1=str1 ","                       
        }
       
        str=flag str1 str2
       
        return str       
}

{
        for(m=1;m<=NF;m++)       
        {               
                if($m ~ /[-+]?[0-9]+(\.[0-9]+)?/)
                        $m=format_number($m)               
        }
       
        print
}

論壇徽章:
0
4 [報告]
發(fā)表于 2005-03-18 15:41 |只看該作者

請教:如何在AWK中調用shell腳本,并在shell中使用AWK的變量

[quote]原帖由 "寂寞烈火"]system("sh urscript"[/quote 發(fā)表:

謝謝烈火兄,能不能再教我如何在 system("sh urscript"里面帶一個AWK里的變量$2,就好像這樣system("sh urscript $2"--顯然這樣不行,有沒有其它辦法!!
謝謝。

論壇徽章:
0
5 [報告]
發(fā)表于 2005-03-18 15:45 |只看該作者

請教:如何在AWK中調用shell腳本,并在shell中使用AWK的變量

原帖由 "夢藍" 發(fā)表:
)
                        $m=format_number($m)               
        }
       
        print
}


謝謝夢藍的腳本!
但有時候我并不需要對所有的數字進行格式化,比如帳號等,而只需改變其中的一列或幾列,有沒有更好的辦法!
謝謝!!

論壇徽章:
1
榮譽會員
日期:2011-11-23 16:44:17
6 [報告]
發(fā)表于 2005-03-18 16:26 |只看該作者

請教:如何在AWK中調用shell腳本,并在shell中使用AWK的變量

to () {
echo $1|rev|sed 's/.../&,/g;s/,$//;s/^/00\./'|rev}
[/code]

論壇徽章:
0
7 [報告]
發(fā)表于 2005-03-18 17:16 |只看該作者

請教:如何在AWK中調用shell腳本,并在shell中使用AWK的變量

#對文件中的數字進行格式化,保留小數點兩位,整數部分每三位一分割
#用法:awk -f frm_num.awk 列號列表 目標文件
#最后一個參數為目標文件,其他為列號;沒有列號則對所有數據格式化
#如:awk -f frm_num.awk 1 2 3 4 "a.txt"
#文件名:frm_num.awk  

function format_number(STRING,  str,flag,str1,str2,i,j,array) {
           str=STRING       
       
        if(str ~ /^[-+]/){
                flag=substr(str,1,1)
                str=substr(str,2)
        }else
                flag=""
       
        i=index(str,"\."
        if(i>0){
                str2=substr(str,i+1)
                str1=substr(str,1,i-1)
               
                if(length(str2)>2)
                        str2=substr(str2,1,2)
                else if(length(str2)<2)
                        str2=str2 "0"               
                       
                str2="\." str2               
        } else{
                str1=str
                str2="\.00"
        }
       
        i=0
        while(length(str1)>3){
                array[++i]=substr(str1,length(str1)-2,3)
                str1=substr(str1,1,length(str1)-3)
        }       
        array[++i]=str1
       
        str1=""
        for(j=i;j>0;j--){
                str1=str1 array[j]
                if(j>1) str1=str1 ","                       
        }
       
        str=flag str1 str2
       
        return str       
}

BEGIN{
        for(i=1;i<ARGC-1;i++){
                col_list[ARGV]=""
                delete ARGV
        }
       
        if(ARGC<=2)
                flag=0       
        else
                flag=1
}

{
        for(m=1;m<=NF;m++)       
        {               
                if((flag==0 || m in col_list) && $m ~ /[-+]?[0-9]+(\.[0-9]+)?/)
                        $m=format_number($m)               
        }
       
        print
}

論壇徽章:
0
8 [報告]
發(fā)表于 2009-10-13 15:27 |只看該作者

回復 #4 RealRaul 的帖子

system("sh urscript "$2)
這樣就可以了

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
9 [報告]
發(fā)表于 2009-10-13 15:35 |只看該作者
老貼老問題!
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯網協會會員  聯系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP