基础
循环
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头)
$ echo 'hello' > foo
$ xxd < foo
0000000: 6865 6c6c 6f0a hello.
$ vim -e -s -c ':set bomb' -c ':wq' foo
$ xxd < foo
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”
# Detect if BOM already exists
BOM=`sed -n '1{/^\xEF\xBB\xBF/p}' $FILE`
if [ -z $BOM ]; then
[ -f "$FILE" ] && /usr/bin/vim -e -s +"set bomb|set encoding=utf-8|wq" $FILE
check $?
fi
}
set_bom
<a name="8auk0"></a>
#### 3. 在 awk 中运行 shell 命令拿到执行结果
- 方案一: 使用 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
- 方案二: getline
$ awk ‘BEGIN{ “date” | getline date; print date; }’ Sun Mar 8 22:21:52 2009
- 方案三: print xxx | "bash"
awk ‘BEGIN{print “df -h”|”bash”}’
- 相关:
[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/)
<a name="ejy1T"></a>
#### 4. 显示数据库所有表结构
```sql
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
【Xargs用法详解】
-t 表示先打印命令,然后再执行。
-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。
-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。
-p 当每次执行一个argument的时候询问一次用户。
-0 当sdtin含有特殊字元时候,将其当成一般字符,想/空格等
-a file 从文件中读入作为sdtin
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符(例九)
相关:Xargs用法详解