【Shell】shell 日志处理(一行一行读文本-必须用while不能用for)

shell 获取结果中的第n列,第n行

ls -l | awk '{print $5}' | sed -n '2p'

awk 是很实用的文本处理命令,print 到后带的是你要获取第几列,sed -n 是指定第几行。

AWK输出某几列

有这样一个文本,需要截取前5行

[root@SH]# cat test.txt 
 2      3651415576       940761              0            0 0000000000000000
 3      3532686312       939551              0            0 0000000000000000
 4      3873453656       984285              0            0 0000000000000000
 5      3884604640       970761              0            0 0000000000000000
 6      2116906224       493295              0            0 0000000000000000
 7      1760674752       480700              0            0 0000000000000000
 8               0            0       29979808         6002 0000000000000000
 10              0            0        3299944         1433 0000000000000000
 11              0            0     2199434640       312565 0000000000000000

linux下统计某个进程的CPU占用和内存使用

#!/bin/bash
# while loop
 
CpuMemStat=""
datemk=""
while true
do
CpuMemStat=` ps aux |grep -i server |grep redis |grep -v py`
datemk=`date "+%Y-%m-%d %H:%M:%S"`
echo $datemk $CpuMemStat >> result.txt
#echo $datemk $CpuMemStat
sleep 20s
done

上面的遇到CpuMemStat结果是多行的就歇菜了,改成

#!/bin/bash
# while loop 
CpuMemStat=""
datemk=""

CpuMemStat=`ps aux |sed -n '1p'|awk '{print $1,$2,$3,$4,$5}'`
datemk=`date "+%Y-%m-%d %H:%M:%S"`
echo $datemk $CpuMemStat >> result.txt

while true
do
	#CpuMemStat=` ps aux |grep -i redis-server|awk '{print $1,$2,$3,$4,$5}'`
    datemk=`date "+%Y-%m-%d %H:%M:%S"`


ps aux |grep -i redis-server|awk '{print $1,$2,$3,$4,$5}'|while read line
do
 echo $line
 echo $datemk $line >> result.txt
	#echo $datemk $CpuMemStat
done 

	sleep 1s
done

(一行一行读,不能用for 必须用while,因为in操作符以任意空白字符作为分割, 而read line是以回车符作为分割。)

有一文本文件如下,每行有两个字符串/空格分开。
$ cat list.txt 
Gly G
Ala A
Val V
Leu L
Ile I
Phe F
for line in `cat list.txt`
do
echo $line
done
得到结果如下:
Gly
G
Ala
A
Val
V
Leu
L
Ile
I
Phe
F
============
while read line
do 
echo $line
done list.txt
运行得到结果如下:
Gly G
Ala A
Val V
Leu L
Ile I
Phe F

hell 脚本 遍历文件 找出包含特定字符串的行数/行

#!/bin/bash
 
printf "*************************************\n"
a=0       
while read line
do        
 [[ $line =~ "css" ]] && ((a++))  
done < test.txt 
echo $a
#!/bin/bash

ceph osd tree |& grep -E "ssd|ssdpool" > osd_nodes_id.txt

strA="rdma63.ssdpool"
while read -r line
do
echo ${line}
if [[ ${line} =~ ${strA} ]];
then
  echo "包含"
fi
done < osd_nodes_id.txt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值