基础

循环

  1. for((i=1;i<=10;i++));do echo $(expr $i \* 4);done
  • awk调用shell命令

    实践

    1. ‘<’ 的作用

    进程代入,可以把命令的执行结果当成文件一样读入 比如comm前一般需要sort 那就可以这样: comm <(sort 1.lst) <(sort 2.lst)paste <(cut -t2 file1) <(cut -t1 file1) 管道差不多,但是支持多个输入。

2. 为文本添加 BOM 头

  • 方案一(通过VIM加BOM头)

    1. $ echo 'hello' > foo
    2. $ xxd < foo
    3. 0000000: 6865 6c6c 6f0a hello.
    4. $ vim -e -s -c ':set bomb' -c ':wq' foo
    5. $ xxd < foo
    6. 0000000: efbb bf68 656c 6c6f 0a ...hello.
  • 方案二 ```

    !/bin/bash

    add_bom.sh

FILE=$1

check() { if (( e = “$1” )); then echo “ERROR: $ACTION failed!!” exit $e else echo “INFO: $ACTION Success!!” fi }

set_bom() { ACTION=”Setting utf-8 BOM”

  1. # Detect if BOM already exists
  2. BOM=`sed -n '1{/^\xEF\xBB\xBF/p}' $FILE`
  3. if [ -z $BOM ]; then
  4. [ -f "$FILE" ] && /usr/bin/vim -e -s +"set bomb|set encoding=utf-8|wq" $FILE
  5. check $?
  6. fi

}

set_bom

  1. <a name="8auk0"></a>
  2. #### 3. 在 awk 中运行 shell 命令拿到执行结果
  3. - 方案一: 使用 system 运行 shell 命令

jay@jay-linux:/tmp$ cat data.txt var1 var2 1 2

jay@jay-linux:/tmp$ cat my.sh

!/bin/bash

echo $1

jay@jay-linux:/tmp$ awk ‘{system(“sh my.sh “ $2)}’ data.txt var2 2

  1. - 方案二: getline

$ awk ‘BEGIN{ “date” | getline date; print date; }’ Sun Mar 8 22:21:52 2009

  1. - 方案三: print xxx | "bash"

awk ‘BEGIN{print “df -h”|”bash”}’

  1. - 相关:
  2. [1. awk调用shell命令](http://blog.sina.com.cn/s/blog_3ef3b17a0100dzw0.html)<br />[2. 在awk中运行shell命令](http://www.shencan.net/index.php/2012/09/03/%E5%9C%A8awk%E4%B8%AD%E8%BF%90%E8%A1%8Cshell%E5%91%BD%E4%BB%A4/)
  3. <a name="ejy1T"></a>
  4. #### 4. 显示数据库所有表结构
  5. ```sql
  6. mysql_stats -N -e "show tables" | xargs -i -t mysql -h10.138.230.23 -uzc_stats -p10419c5976ab82c6 -P3933 zc_stats -N -e "show create table {};" > /tmp/{}.sql
  1. Xargs用法详解】
  2. -t 表示先打印命令,然后再执行。
  3. -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。
  4. -n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
  5. -p 当每次执行一个argument的时候询问一次用户。
  6. -0 sdtin含有特殊字元时候,将其当成一般字符,想/空格等
  7. -a file 从文件中读入作为sdtin
  8. -e flag ,注意有的时候可能会是-Eflag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
  9. -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符(例九)

相关:Xargs用法详解