kxbin
          成功留給有準(zhǔn)備的人
          posts - 10,  comments - 35,  trackbacks - 0
          1.awk給輸出的字段加單引號。(下面輸出的第三個字段都加上了引號)
          awk -v aa="'" '{print $1,$2, aa $3 aa}' filename
          例子:
          [root@WANGJIAN ~]# awk -v aa="'" '{print $1,aa $2 aa}' file
          a '13'
          b '1'

          2.刪除兩列之間多個不等空格使成為兩列中間只有一個空格的規(guī)范格式
          方法1:cat filename |tr -s ' ' 
          方法2: cat filename |sed 's/ \{2,\}/ /g'

          例子:
          [root@WANGJIAN ~]# cat a
          a 13
          b 1
          c 23
          d 234
          [root@WANGJIAN ~]# cat a | tr -s ' ' #注意引號里有空格
          a 13
          b 1
          c 23
          d 234
          [root@WANGJIAN ~]# cat a | sed 's/ \{2,\}/ /g' #注意空格
          a 13
          b 1
          c 23
          d 234

          3.將一列的轉(zhuǎn)換成一行(本例是指第一列,也同理換成其他列)
          awk '{printf "%s",$1}' filename
          例子:
          [root@WANGJIAN ~]# cat file
          a 13
          b 1
          c 23
          d 234
          [root@WANGJIAN ~]# awk '{printf "%s", $1}' file
          abcd

          補(bǔ)充:合并上下行并以空格相分隔
          sed '$!N;s/\n/ /' #合并上下兩行
          cat file
          1234567890
          0987654321
          執(zhí)行命令后
          1234567890 0987654321

          4.用awk給定的分隔符格式化輸出
          [root@WANGJIAN ~]# echo a b c |awk '{print $1":"$2":"$3}'
          a:b:c
          [root@WANGJIAN ~]# echo a b c |awk '{OFS=":";print $1,$2,$3}'
          a:b:c

          5.用某一文件的一個域替換另一個文件中的的特定域(條件是兩個文件第一列相同)
          該例是用linux shadow文件中的密文部分替換passwd中的"x",生一個新passwd文件,如下所示
          文件passwd: 
          s2002408030068:x:527:527::/home/dz02/s2002408030068:/bin/pw 
          文件shadow: 
          s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:12676:0:99999:7::: 

          awk 'BEGIN{OFS=FS=":"} NR==FNR{a[$1]=$2}NR>FNR{$2=a[$1];print}' shadow passwd
          NR==FNR,第一個文件shadow,以$1為下標(biāo),將$2的值賦給數(shù)組a
          NR>FNR,第二個文件passwd,將文件shadow$2的值賦值給文件passwd

          6.編寫一個sed命令,給一個文件的行間距變?yōu)閮杀缎芯?/span>
          sed '$!G;$!G' filename

          7.常見sed等價命令
          basename sed 's/\(.*\)\/\([^/]*\)/\2/' or sed 's,.*/,,'
          cat sed '' or sed -n '1,$p' or sed '1,$!d'
          cat -s sed '/./,/^$/!d'
          cat -n sed '=' | sed 'N;s/\n/\t/;s/^/ &/' or sed '=' | sed '$!N;s/\n/ /'
          cat -E sed 's/$/\$/'
          cat -t sed 's/\t/^I/g'
          cut -c n sed 's/\(.\)\{n\}.*/\1/' or sed 's/^.\{(n-1)\}//g;s/\(.\)\(.*\)/\1/g'
          cut -c x-y sed 's/\(^.\{y\}\)\(.*\)/\1/g;s/^.\{(x-1)\}//'
          cut -d| -f6 sed 's/\(\([^|]*\)\|\)\{6\}.*/\2/'
          cp file1 file2 sed 'w file2' file1
          expand -t 1 sed 's/\t/ /g'
          dirname sed 's/\(.*\)\/\([^/]*\)/\1/' or sed 's,[^/]*$,,'
          grep patten sed -n '/patten/p' or sed '/patten/!d'
          grep -v patten sed -n '/patten/!p' or sed '/pateen/d'
          grep -n patten sed -n '/patten/{=;p}'| sed 'N;s/\n/:/'
          head sed -n '1,10p'
          head -1 sed -n '1p' or sed 'q'
          head -Number sed '1,Number!d' or sed 'Numberq'
          paste -s file1 file2 sed ':a;N;s/\n/\t/;ba;' file1 file2 | sed 's/\t\t/\n/'
          paste -sdstr sed ':a;N;s/\n/str/;ba'
          rev sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
          tac sed -n '1! G;$p;h' or sed -n 'G;$p;h'
          tail -1 sed -n '$p' or sed '$!d'
          tail -Number sed ':t;$q;N;(Number+1),$D;bt'
          tail -f sed -u '/./!d'
          tr "\n" " " sed ':a;N;s/\n/ /;ba'
          tr "A-Z" "a-z" sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'
          tr "a-z" "A-Z" sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'

          8.將字符串進(jìn)行割接顯示
          如將 hellohellohello 顯示為
          hello
          hello
          hello

          方法:
          echo "hellohellohello" |fold -w5
          echo hellohellohello|sed 's/\(.....\)/\1\n/g'

          echo hellohellohello|sed 's/\(.....\)/\1#/g'|tr '#' '\n'

          9.從右取字符串中的字符操作
          [root@localhost ~]# string="abcdefg"
          [root@localhost ~]# echo ${string:(-3)} #取efg
          efg
          [root@localhost ~]# echo ${string:(-1)}
          g
          [root@localhost ~]# echo ${string:(2)} #跳過前2個字符
          cdefg

          10.漢字按拼音排序
          [root@localhost ~]# cat str 
          的見上我人歐怕我下風(fēng)那把長下在懊上的風(fēng)個還見看 #未排序前
          [root@localhost ~]# cat str |sed 's/./&\n/g'|LC_ALL=C sort|tr '\n' ' '|tr -d ' ';echo
          #懊把長的的風(fēng)風(fēng)個還見見看那歐怕排前人上上未我我下下序在

          11.tr命令小結(jié)
          tr命令:
          tr "[a-z]" "[A-Z]" 轉(zhuǎn)換大小寫
          tr "@" "\n" 替換
          tr -d "a" 刪除
          tr -s "a" 相鄰重復(fù)的a 只保留一個
          [root@localhost ~]# echo abcde |tr -d "a"
          bcde
          [root@localhost ~]# echo abcde |tr "a" "#"
          #bcde
          [root@localhost ~]# echo aabcded |tr -s "a"
          abcded

          12.指定每一行的第幾次出現(xiàn)進(jìn)行替換
          sed 's/old/new/n' filename
          [root@localhost ~]# cat sh
          abcddds
          adsfsfdio
          dsabcdljlsabc
          [root@localhost ~]# cat sh|sed 's/abc/ABC/1'
          ABCddds
          adsfsfdio
          dsABCdljlsabc
          [root@localhost ~]# cat sh|sed 's/abc/ABC/2'
          abcddds
          adsfsfdio
          dsabcdljlsABC
          [root@localhost ~]# 

          13. 為文件加行號輸出
          sed = filename|sed 'N;s/\n/:/'
          cat -n filename
          nl filename

          [root@localhost ~]# sed = /etc/passwd|sed 'N;s/\n/:/' #可以指定分割符
          1:root:x:0:0:root:/root:/bin/bash
          2:bin:x:1:1:bin:/bin:/sbin/nologin
          3:daemon:x:2:2:daemon:/sbin:/sbin/nologin

          [root@localhost ~]# sed = /etc/passwd|sed 'N;s/\n/ /'
          1 root:x:0:0:root:/root:/bin/bash
          2 bin:x:1:1:bin:/bin:/sbin/nologin

          14.打印文檔奇數(shù)行(隔行輸出)
          sed 'n;d'
          sed 'x;$!N;x'
          sed -n 'p;n'
          1
          3
          5
          7

          15.打印偶數(shù)行(隔行輸出)
          sed -n 'n;p'
          sed '1d;n;d;'
          2
          4
          6
          8

          16.用于計算的兩個命令 bc expr
          expr 2 + 3 兩個數(shù)和運(yùn)算符之間要有空格
          [root@localhost ~]# date +%d-2|bc 前兩天的日
          18
          計算的時候要有小數(shù)部分:
          echo "2/8" |bc -l
          echo $a*$b|bc
          echo "scale=2; 2/8" | bc -l
          awk 'BEGIN{printf "%.2f",2/8}' 可以指定保留小數(shù)點(diǎn)幾位 
          posted on 2012-04-24 23:26 kxbin 閱讀(609) 評論(0)  編輯  收藏 所屬分類: 轉(zhuǎn)發(fā)Linux
          你恨一個人是因?yàn)槟銗鬯荒阆矚g一個人,是因?yàn)樗砩嫌心銢]有的;你討厭一個人是因?yàn)樗砩嫌心阌械臇|西;你經(jīng)常在別人面前批評某人,其實(shí)潛意識中是想接近他。

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(5)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          J2EE

          java技術(shù)網(wǎng)站

          Linux

          平時常去的網(wǎng)站

          數(shù)據(jù)庫

          電影網(wǎng)站

          網(wǎng)站設(shè)計

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 金乡县| 遂宁市| 雷州市| 昆明市| 福贡县| 衡水市| 家居| 长沙市| 紫金县| 高雄市| 玉环县| 白山市| 彭泽县| 汤阴县| 鹰潭市| 佳木斯市| 上饶县| 阳原县| 长治县| 依兰县| 昌黎县| 昆明市| 临颍县| 香港 | 无为县| 成安县| 正定县| 喜德县| 平顶山市| 石景山区| 封丘县| 贵德县| 夏津县| 太谷县| 深圳市| 呈贡县| 三穗县| 平安县| 西城区| 游戏| 乳源|