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
- 可以awk '{print $1,$2,$3,$4,$5}
- 另外一种实现方法awk '{NF-=2}1',这里的1换成别的数字也可以,NF-=2表示倒数第二列
- https://my.oschina.net/u/3746745/blog/1923899
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