平时工作中经常需要用脚本处理一些简单的数据,找个地方记录一下方便自己日后查看。有问题或者有更好的方法,欢迎提出一起进步!
在flow中调用csh脚本处理一些数据是非常好用且高效的,有时候搭配python使用,可以快速完成一个紧急的任务,后续有时间再进行优化
#!/bin/csh
1. 加减计算:
set a = `echo $st*0.001 | bc `
@a = $b + $c + $d
echo "scale=4;34+89" | bc
有时候明明觉得自己写的和查到的一模一样,但总是报错,很烦人。(对于上面的乘除,我还记录了需要加反斜杠,但是忘记为什么要加了,刚试了一下不加也可以😅)
2. 数组:
直接照搬之前用到的一个场景:文件中有很多行,某些行的某一个分割的地方是我需要的内容:
set pins0 = `grep 'key0' file | awk '{print $1}'` #awk 要打印最后一个字符串的话,用$NF
set pins1 = `grep 'key1' file | cut -d ';' -f1`
set i = 1
foreach p ($pins0)
echo "$p,$pins1[$i]"
set i = `echo "$i + 1" | bc`
end
这个东西我一般比较少用,感觉涉及到数组还是python更好用些。
3. grep:
#抓取某个关键字对应的行:
grep -n 'key' file
#抓取某个关键字及其下面或者上面的行:
grep -A1 'key' file #下面的行
grep -B1 'key' file #上面的行
#抓取除某个关键词以外的行:用来抓文件中的某些内容很好用
grep -v "#" file
4. sed:
#在文件中添加一行"xxxxxx":
sed -i '1 i\xxxxxx' file #其中1表示行号,可以替换为任意值
sed -i '$a'"\xxxxxx_$val" file #需要注意的是单引号里和那个双引号之间是没有空格的
sed -i "/yyyyyy/a\xxxxxx" file #在yyyyyy行后添加一行xxxxxx
#替换:
sed -i "{s#xxx#yyy_$i#g}" file #只把xxx替换为yyy_$i
sed -i "s#^\s*xxx.\+#yyy_$i#g" file #文件中xxx的开头有空格,后面是一串不知道什么的东西但不重要,属于整行替换
sed -i "/read time/{s#ccc ddd#eee fff#g}" file #将原文中的read time {ccc ddd}替换为{ddd eee}
#删除:
sed -i $i,{$j}d file #或者 sed -i 3,${i}d file
#在某些特定行内grep:
sed -n ${st},${et}p file | grep 'xxx'
5. 遍历文件中的每一行:
方法一:
set nums = `we -l file | awk '{print $1}'`
set i = 1
while ($i <= $nums)
@i++
end
方法二:
set file = 'xxx.csv'
foreach line (`awk '{print}'. $file`)
end
6. 判断文件是否存在:
方法一:
if (-e file) then #不存在 ! -e
endif
方法二:
set files = (aaa bbb ccc)
foreach file ($files)
if ( "x${file}" == "x") then
echo "$file is not exist ! "
else
echo "$file is existed !"
endif
end
7. if用法:
if (($a == "xxx") && ($b == "yyy")) then #或者使用 " || "
endif
8. 字符串反转:
set a = `echo "$a" | rev | cut -d '_' -f2 | rev`
9. source脚本时增加一些option:
例如: source xxx.csh -input xxx -output yyy
while ($#argv)
if ("x$argv[1]" == "x-xxx") then
shift
set input = "$argv[1]"
else if ("x$argv[1]" == "x-output") then
shift
set output = "$argv[1]"
else
goto WRANG
endif
shift
end
WRANG:
echo "unknow option '$argv[1]' "
IT工作脚本技巧:Csh与Python协作的数据处理与文件操作,
1147






