awk 和 sed 命令的使用

1. 针对以下文本内容的操作,请写出相关的 awk 命令

 

当第 3 列大于 0 时,输出文本中对应行的第 1 列和第 2 列与第 3 之积

        awk '$3 > 0 { printf "%s\t%d\n", $1, $2 * $3 }' profile.txt

 统计第 3 列大于 15 的行数,记为 X,并以下列格式输出  “X employees worked more than 15 hours. ”

        awk '$3 > 15 { count++ } END { printf "%d employees worked more than 15 hours.\n", count }' profile.txt

使用特殊变量 NRNF,统计输出整个文本的行数、单词数和字

        awk 'END { printf "Line count: %d\nWord count: %d\nCharacter count: %d\n", NR, NF, length }' profile.txt


2. 使用 awk 统计/etc/passwd 文件中,

(1)  登陆 shell 为 “/sbin/nologin” 的用户个数

awk -F: '$7 == "/sbin/nologin" { count++ } END { print count }' /etc/passwd

(2)  用户名包含'g'的用户,打印出用户名 UID

awk -F: '$1 ~ /g/ { print $1, $3 }' /etc/passwd


3、使用 awk 统计当前文件夹下,文件总的大小

ls -l | awk '{ total += $5 } END { print total }'


4. 针对下列文本内容,使用 sed 命令完成以下操作 4000001476

4000000041

4000002754

4000000944

4000002549

(1)  将文本内容中每行中的 400 替换为 800 显示,即输出如下:

8000001476

8000000041

8000002754

8000000944

8000002549

sed 's/400/800/g' file.txt

(2) 使用正则表达式, 将文本内容中每行的前三个数字, 以小括号括起来 示,  即输出如下:

(400)0001476

(400)0000041

(400)0002754

(400)0000944

(400)0002549

sed 's/^\(.\{3\}\)/(\1)/' file.txt

(3)  使用正则表达式, 将文本内容中每行的中间三个数字前后增加“- ” 号,  即输出如下:

400-000-1476

400-000-0041

400-000-2754

400-000-0944

400-000-2549

sed 's/\(.\{3\}\)\(.\{3\}\)\(.\{4\}\)/\1-\2-\3/' file.txt

(4)打印输出第 3 行到最后一行的内容,即输出4000002754

4000000944

4000002549

sed -n '3,$p' file.txt


5.  下列命令的输出结果是什么?

echo “123 abc” | sed –r  ‘s/[0-9]+/& &/’

echo abcd123 | sed  ‘s/\([a-z]*\).*/\1/’

echo  “abcd cd 123” | sed  ‘s/\[a-z][a-z]*\) \([a-z][a-z]*\)/\2 \1/’

echo “go to the the bed” | sed –n  ‘/\([a-z][a-z]*\) \1/p’   echo “go to the the bed | sed –n  ‘s/\([a-z][a-z]*\) \1/\1/’

echo "123 abc" | sed -r 's/[0-9]+/& &/' 输出:123 123 abc

将匹配到的数字 [0-9]+ 重复一次,并用空格分隔。

echo abcd123 | sed 's/\([a-z]*\).*/\1/' 输出:abcd

匹配以小写字母开头的任意数量字母,然后将整行替换为匹配到的内容。

命令echo "abcd cd 123" | sed 's/\([a-z][a-z]*\) \([a-z][a-z]*\)/\2 \1/'的输出结果是:cd abcd 123

该命令使用正则表达式将输入的字符串中的两个单词进行了反转,并在它们之间添加了一个空格。因此,"abcd" 和 "cd" 的位置被交换,输出为"cd abcd 123"。

echo "go to the the bed" | sed -n '/\([a-z][a-z]*\) \1/p' 输出:the the

匹配连续重复的单词,输出重复的单词。

echo "go to the the bed" | sed -n 's/\([a-z][a-z]*\) \1/\1/' 输出:go to the bed

将连续重复的单词替换为单个单词,输出结果是去掉了重复的单词。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值