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
使用特殊变量 NR、NF,统计输出整个文本的行数、单词数和字符数
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
将连续重复的单词替换为单个单词,输出结果是去掉了重复的单词。