linux 记录

linux 行数值求和,列数值求和

行求和

sum.txt 空格分隔
1 2 3 4 5

cat sum.txt | awk '{ for(i=1;i<=NF;i++) sum+=$i; print sum}'

复杂些文本

ahdhkjhdaj
adn;oda: 10, 8, 3, 12
msal'
cat sum.txt | sed -n '2p' | awk -F ":" '{print $2}' | awk -F "," '{ for(i=1;i<=NF;i++) sum+=$i; print sum}'

定位第二行用sed,搜索用grep

列求和

1
2
3
awk '{sum+=$1}END{print sum}' sum.txt

复杂些文本

agdasas
agafsasf:10
gfassas:8
gaas:3
asfd:12
faasa
sed -n '2,5p' sum.txt | awk -F ":" '{sum+=$2}END{print sum}'

awk 分隔符

awk默认分割符是空格。awk的分隔符还分为两种,“输入分隔符” 和 “输出分隔符” 。

(1)输入分隔符:英文原文field separator,简称FS。默认空白字符(即空格),awk默认以空白字符为分隔符对每一行进行分割。内置变量FS,使用-v选项。
awk -v FS='\t' '{}' file
  (2)输出分割符:英文原文output field separator,简称OFS。
外部变量不能直接在awk中引用。正确引入方式是 ‘“$a”’ 即外部是一个单引号,内部是一个双引号。

数字文本可以使用 == >= <= != 代表等于大于小于不等于
文字文本可以使用 ~/text/ 代表含有
逻辑性文本 && || ! 代表且或非
内置变量,变量前不需要加 $ 符号,只需要字母即可
外置变量,变量前不仅要加 还需要引号括起 来 ′ " 还需要引号括起来 '" 还需要引号括起"{variable}"’

a=3
awk '{if ($1=='"$a"') print NR,$0}' txt

awk 'BEGIN{a=10}{if ($3~/a/) a+=$1 fi}END{print a}' txt

" ' $i ' " ???
 awk '{if($1=="'$i'")print}'

Linux if

ref: https://blog.csdn.net/m0_50668851/article/details/115122071

if condition;
then
    commands;
else if condition;
then
    commands;
else
    commands;
fi

算术比较

比较条件通常被房子在封闭的中括号(或者是方括号)内,一定要注意在 [或] 与操作数之间有一个空格。如果忘记了这个空格,shell脚本就会报错。
-gt #大于 相当于 >

-lt #小于 相当于 <

-ge #大于或等于 相当于 >=

-le #小于或等于 相当于 <=

-a 是逻辑与操作,and的意思

-o 是逻辑或的操作,or的意思

[ $var1 -ne 0 -a $var2 -gt 2 ] #使用逻辑与 -a

[ $var1 -ne 0 -o $var2 -gt 2 ] #使用逻辑或 -o

文件系统相关判断

[ -f $file_var ]: 如果给定的变量,包含正常的文件路径,或者文件名,则返回真

[ -d $var ]:如果给定的变量包含目录,则返回真,文件目录存在即为真

[ -e $var ]:如果给定的变量包含的文件存在,则返回真,文件存在即为真

[ -c $var ]:如果给定的变量包含的是一个文件字符设备文件的路径,则返回真

[ -b $var ]:如果给定的变量包含的是一个块设备文件的路径,则返回真

[ -w $var ]:如果给定的变量包含的文件可写,则返回真,也就是说文件具有可写权限

[ -r $var ]:如果给定的变量包含的文件可读,则返回真,也就是说文件具有可读权限

[ -x $var ]: 如果给定的变量包含的文件可执行,返回真,也就是说文件具有可执行的权限

[ -L $var ]:如果给定的变量包含的是一个符号链接,则返回真,也就是说,文件是一个链接文件

考虑下面的例子:

fpath="/etc/passwd"
if [[ -e $fpath ]];
then
    echo "File exists"
else
    echo "Dose not exists"
fi

字符串比较

进行字符串比较是,最好用双中括号(或者双方括号),因为有时采用单个中括号会产生错误

注意,双中括号是Bash的一个扩展特性。
[[ $str1 = $str2 ]] : 当str1等于str2时,返回真。也就是说,str1与str2包含的文本是一模一样的

注意:在=前后各有一个空格,如果没有空格,那就不是比较关系了,就变成了赋值语句了。

[[ $str1 == $str2 ]] :这是检查字符串是否相同的另一种写法

[[ $str1 != $str2 ]] : 如果str1与str2不相同,返回真
判断字符串是否为空

[[ -z $str ]] : 如果str为空串,则返回真

[[ -n $str ]] :如果str不为空,则返回真


if [[ -n $str1 ]] && [[ -z $str2 ]];
then
    commands;
fi

echo 输出带tab

使用-e参数来支持输出类似C的字符串,里面可以加入特殊字符比如换行\n, Tab\t等。

echo -e "Hello\nWorld\nA\tB"

Linux shell 字符串切割

ref

截取第m个到第n个字符的字符串区间(如m=3,n=6)

export str="123456789"
echo ${str:3:(6-3)}
456

从以上第二个表达式可以看出用法,即: s t r : 3 : ( 6 − 3 ) 。归纳为: {str:3:(6-3)}。归纳为: str:3:(63)。归纳为:{str:begin:len},且支持数学表达式,如:6-3。

sra to fq

fastq-dump --split-3 -O ./ $i --gzip

awk求列均值

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

0723
日志文件分析。日志文件某个单词或**某个特殊字符串(字符串当然可以是长度为1的单个字符)**出现多少次。

匹配统计,一般用正则,总结几个统计字符串个数的方法。

方法一:使用 grep 命令

grep -o '字符串' file | wc -l

方法二:使用awk命令进行统计

awk -v RS="@#$j" '{print gsub(/字符串/,"&")}' file

方法三:另一种使用awk命令进行统计的方法

awk  '{s+=gsub(/字符串/,"&")}END{print s}' file

awk简介
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

实例

[root@ihh logs]# cat test.txt
userid:121212
userid:232323
userid:3434
username:3434
username:4343
然后统计 userid 在 test.txt 文件里出现多少次,那么根据上面提供的命令,可以这样操作:

[root@ihh logs]# grep -o ‘userid’ test.txt |wc -l
3

[root@ihh logs]# awk -v RS=“@#$j” ‘{print gsub(/userid/,“&”)}’ test.txt
3

[root@ihh logs]# awk ‘{s+=gsub(/userid/,“&”)}END{print s}’ test.txt
3

sed

ref :
https://blog.csdn.net/jimo_lonely/article/details/115317141

普通替换
sed -I 's///g' file
变量替换"" 双引号解析变量
sed -I "s//$a/g" file
路径替换如变量为pwd结果,自定义分隔符
sed -I "s||$a|g" file

cat tmp | while read i
do
cd $i
cp ../*sh .
#pro=`ls *protein*`
#name=`basename $pro '.faa'`
#echo $name
#cp $pro ${name}_edit.faa
#sed -i 's/\s.*//g' ${name}_edit.faa
PWD=`pwd`
FA=`ls *edit*`
echo $PWD
echo $FA
sed -i "s|PWD|${PWD}|g" *i.sh
sed -i "s/FA/${FA}/g" *.sh
cd ..
done

cat多个文件加换行符

  1. 添加换行符:如果您需要在合并的文件中添加换行符,可以使用命令如下:
    cat file1.txt file2.txt | sed G > merged_file.txt
    这个命令使用了sed命令来在文件之间添加换行符。
    或者现在每个文件末尾加一行
 vi test.txt
 sed -i -e '$a\'$'\n''This line was appended at the end.' test.txt
  vi test.txt
 sed -i -e '$a\'$'\n''' test.txt

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值