csh中一些简单的用法

IT工作脚本技巧:Csh与Python协作的数据处理与文件操作,

平时工作中经常需要用脚本处理一些简单的数据,找个地方记录一下方便自己日后查看。有问题或者有更好的方法,欢迎提出一起进步!

在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]' "

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值