Results tagged “shell” from WHO IS 2HEI?
Just mark it. :-)
#!/bin/sh
awk -F"_t_7_Y_" '{if($1==1) {printf $2; for(i=3;i<=NF;i++) if(i==NF) print $i;else printf $i}}' temp1 > 1.txt
awk -F"_t_7_Y_" '{if($1==2) if($2 in S22){S22[$2]=$2;S23[$2]=$3" "S23[$2];N2[$2]++}else {S22[$2]=$2;S23[$2]=$3;N2[$2]=
awk 'NR==FNR {for(i=2;i<=NF;i++) S[$1]=S[$1]" "$i;}NR>FNR{print $0" "S[$1]}' 2.txt 1.txt > t1.txt
awk 'NR==FNR {for(i=2;i<=NF;i++) S[$1]=S[$1]" "$i;}NR>FNR{print $0" "S[$1]}' 3.txt t1.txt > t2.txt
awk 'NR==FNR {for(i=2;i<=NF;i++) S[$1]=S[$1]" "$i;}NR>FNR{print $0" "S[$1]}' 4.txt t2.txt > final.txt
一、16进制转换成10进制
printf %d 0xF
15
或者
echo $((16#F))
15
二、10进制转换成16进制
printf %x 15
f
或者
echo "obase=16;15"|bc
F
三、10进制转换成8进制
printf %o 9
11
四、8进制转换成10进制
echo $((8#11))
9
五、同理二进制转换成10进制
echo $((2#111))
7
六、10进制转换成二进制
echo "obase=2;15"|bc
1111
#!/bin/bash
#得到1970年到今天的累计天数
get_day()
{
Begin_Year=1970
TO_Year=`date +%Y`
L=`expr $TO_Year - $Begin_Year`
To_Mon=`date +m%d`
To_day=`date +%j`
nu=1
all_day=0
while [ $nu -le $L ]
do
Y=`expr $Begin_Year + $nu`
is_runnian=`expr $Y \% 4`
if [ $is_runnian -eq 0 ]
then
day_nu=366
else
day_nu=365
fi
nu=`expr $nu + 1`
all_day=`expr $all_day + $day_nu`
done
echo `expr $To_day + $all_day`
}
shell变量的作用域
while read line
do
str[$i]=$line1
echo $i
echo ${str[i]}
let i=i+1
done < data
len=${#str[@]}
echo $len
$len长度为实际data文件的行数
str[]变量的作用域一直有效
===================
cat data|while read line
do
str[$i]=$line1
echo $i
echo ${str[i]}
let i=i+1
done
len=${#str[@]}
echo $len
$len长度为0
说明str[]变量的作用域到done结束即失效。
原因是局部变量是普通的变量,仅在创建它的Shell中有效。
cat data|while read line 使用了管道符 "|"
表明父shell中的局部变量不会传递到子shell中
Shell中标准输出重定向
例子:
把错误和输出都重定向到out.txt中
ls -l a.pro > out.txt 2>&1
把错误重定向到文件out.txt中
ls -l a.pro 2>out.txt
更多操作:
command > filename 把把标准输出重定向到一个新文件中
command >> filename 把把标准输出重定向到一个文件中(追加)
command 1 > fielname 把把标准输出重定向到一个文件中
command > filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把把标准错误重定向到一个文件中
command 2 >> filename 把把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入
源文件目录结果如下:
ls -l /temp/filelist/2001/
-rw-r--r-- 1 test test 6472 03-28 19:19 100-2001-9-2-0.png
-rw-r--r-- 1 test test 5860 03-28 19:19 100-2001-9-2-1.png
-rw-r--r-- 1 test test 6472 03-28 19:20 100-2001-9-3-0.png
-rw-r--r-- 1 test test 5860 03-28 19:20 100-2001-9-3-1.png
-rw-r--r-- 1 test test 6472 03-28 19:20 100-2001-9-4-0.png
-rw-r--r-- 1 test test 5860 03-28 19:20 100-2001-9-4-1.png
-rw-r--r-- 1 test test 6472 03-28 19:20 100-2001-9-5-0.png
-rw-r--r-- 1 test test 5860 03-28 19:20 100-2001-9-5-1.png
ls -l /temp/filelist/2003/
-rw-r--r-- 1 test test 6472 03-28 19:19 100-2003-8-2-0.png
-rw-r--r-- 1 test test 5860 03-28 19:19 100-2003-8-2-1.png
-rw-r--r-- 1 test test 6472 03-28 19:20 100-2003-8-3-0.png
-rw-r--r-- 1 test test 5860 03-28 19:20 100-2003-8-3-1.png
-rw-r--r-- 1 test test 6472 03-28 19:20 100-2003-8-4-0.png
-rw-r--r-- 1 test test 5860 03-28 19:20 100-2003-8-4-1.png
-rw-r--r-- 1 test test 6472 03-28 19:20 100-2003-8-5-0.png
-rw-r--r-- 1 test test 5860 03-28 19:20 100-2003-8-5-1.png
要求把2003目录中的“2003”替换为“2001”,并且把2003目录中修改文件名后的文件合并到2001目录中。
[local#2hei.net]# more ChangeName.sh
#!/bin/sh
# Edit By 2hei
Path="/temp/filelist"
ls -l $1 |awk '{if($8>0) print $8}' > $Path/list
while read Line
do
Name=`echo $Line|sed 's/2003/2001/g'`
cp $Path/2003/$Line $Path/2001/$Name
done < $Path/list
Usage: sh ChangeName.sh /temp/filelist/2003
以前也一直在用sqlldr进行oracle的数据导入工作,但由于数据表结构比较简单,数据格式比较规范,所以简单的脚本即可完成任务,没有仔细的进行研究。
最近因为项目需要,要处理一个稍微复杂一点的表,涉及到日期字段,还有自增序列,字段比较复杂不规则,有很多空列,经过一番研究后,终于搞定,特此总结一下。
1. 空字段处理: TRAILING NULLCOLS 但是整行不能全空,否则整行无法插入
2. 日期字段处理:格式化处理 AddDate "to_date(:AddDate,'''yyyy-mm-dd hh24:mi:ss''')"
3. 自定义字段分割符 “|”
4. 采用触发器来处理自增字段,具体的建立方法可参考我的另一篇关于触发器的介绍带有条件的触发器trigger
ldr脚本如下:
vi sql.ctl
LOAD DATA
INFILE '/home/oracle/data/table.data'
APPEND INTO TABLE table
fields terminated by '|'
TRAILING NULLCOLS
(
ID,
USERNAME,
PASSWORD,
AddDate "to_date(:AddDate,'''yyyy-mm-dd hh24:mi:ss''')"
)
数据文件样式 table.data
|test|test|2008-03-20 18:09:10
|2hei|2hei|2008-03-20 18:09:10
|admin|admin|2008-03-20 18:09:10
loader 脚本运行方式:
切换到oracle用户 su - oracle
或者root下执行 su -l oracle -c "sqlldr userid=2hei/2hei control=/home/oracle/data/sql.ctl log=/home/oracle/log/sql.log bad=/home/oracle/log/bad.log"
执行后可以查表,看看字段的插入情况。
如果有问题可以看执行后的log 或者 bad文件。




