Quanyin 说

Shell 处理数据用到的一些小代码

这篇文章记录一些在用 Shell 简单处理一些数据时用到的一些小代码,主要是个人在科研中遇到的,简单记录下,备忘,随时更新。

主要用到的命令大概也是 lsechofindbcgrepsedawk

echo

有时为了输出结果更明了,需要使用 echo 进行提示,但是又不想换行,就需要使用参数 \c

# 默认换行
echo "输入参数:"
echo "输出变量:$para"
# 不换行,-e 表示开启转义, /c 表示不换行
echo -e "输入参数:\c"
# 不换行,用参数 -n
echo -n "输出结果"

生成序列

两种方式,利用 {..} 和 命令 seq

# 生成 First 到 Last 间隔 Increment 的序列
{First..Last..Increment}
seq FIRST INCREMENT LAST

{..} 方法的好处是简单快捷,但好像不支持其中的参数为变量?
seq 方法更具有普适性,速度上可能会有损失

ls

只显示目录

有时在用 for 循环时,只想对当前目录下的目录进行操作,就需要 ls 只显示目录而不显示文件了

ls -d */

find

寻找最底层的目录

find -type d -printf "%n %p \n"|grep "^2 "|awk '{printf $2 "\n"}
此命令来源于网络,第一次见时,惊叹于强大的功能与逻辑

浮点运算 bc

Bash Shell 默认只支持整数运算,如果需要浮点运算就需要 bc 来帮忙了,脚本中的使用方式是:

e=$(echo "scale=5; $a / $b" | bc)
尽量加 scale 指定运算位数

grep

这个命令比较熟悉,常用的参数也就是

sed

在源文件中修改

sed 默认的输出方式是原文件不变,将修改后的结果输出到屏幕

# 输出到屏幕,原文件不做修改
sed  '处理命令' 要处理的文件
# 不输出到屏幕,在原文件上直接修改
sed -i '处理命令' 要处理的文件

替换

# 将所有的 ori 替换成 sub
sed 's/ori/sub/g' example-file.txt

删除

# 删除 del
sed '/del/d' example-file.txt

更换命令分割符

sed 中的分隔符是任意指定的,默认是 /,但可以任意指定,可以是 %$等:

# 替换为 $
sed '$del$d' 
# 替换为 %
sed '%del%d'

awk

awk 是强大的文本处理工具,按行处理文本。

特殊变量

awk 默认有几个特殊变量,在编程时使用起来会方便很多

print 结果换行

只输出第一列数据
awk '{print $1 "\n" }' data.txt

求和

awk '{sum+=$1} END {print "Sum = ", sum}' data.txt

输出平均值

awk '{sum+=$1} END {print "Average = ", sum/NR}'  data.txt

输出最大值

awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'  data.txt

输出最小值

awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'  data.txt

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »