Linux cut命令用于显示每行从开头算起 num1 到 num2 的文字。
cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]
使用说明:
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
参数:
当你执行who命令时,会输出类似如下的内容:
$ who
rocrocket :0 2009-01-08 11:07
rocrocket pts/0 2009-01-08 11:23 (:0.0)
rocrocket pts/1 2009-01-08 14:15 (:0.0)
如果我们想提取每一行的第3个字节,就这样:
$ who|cut -b 3
c
c
c
Linux sort命令用于将文本文件内容加以排序。
sort可针对文本文件的内容,以行为单位来排序。
sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][&#43;<起始栏位>-<结束栏位>][--help][--verison][文件]
参数说明&#xff1a;
在使用sort命令以默认的式对文件的行进行排序&#xff0c;使用的命令如下&#xff1a;
sort testfile
sort 命令将以默认的方式将文本文件的第一列以ASCII 码的次序排列&#xff0c;并将结果输出到标准输出。
使用 cat命令显示testfile文件可知其原有的排序如下&#xff1a;
$ cat testfile #testfile文件原有排序
test 30
Hello 95
Linux 85
使用sort命令重排后的结果如下&#xff1a;
$ sort testfile #重排结果
Hello 95
Linux 85
test 30
[root&#64;node0001 ~]# cat sort.txt
banana 12
apple 8
orange 4
[root&#64;node0001 ~]# sort -t&#39; &#39; -k2 sort.txt
banana 12
orange 4
apple 8
[root&#64;node0001 ~]# sort -t&#39; &#39; -k2 -n sort.txt
orange 4
apple 8
banana 12
[root&#64;node0001 ~]# sort -t&#39; &#39; -k2 -nr sort.txt
banana 12
apple 8
orange 4
3、wc
Linux wc命令用于计算字数。
利用wc指令我们可以计算文件的Byte数、字数、或是列数&#xff0c;若不指定文件名称、或是所给予的文件名为”-“&#xff0c;则wc指令会从标准输入设备读取数据。
wc [-clw][--help][--version][文件...]
参数&#xff1a;
在默认的情况下&#xff0c;wc将计算指定文件的行数、字数&#xff0c;以及字节数。使用的命令为&#xff1a;
wc testfile
先查看testfile文件的内容&#xff0c;可以看到&#xff1a;
$ cat testfile
Linux networks are becoming more and more common, but scurity is often an overlooked
issue. Unfortunately, in today’s environment all networks are potential hacker targets,
fro0m tp-secret military research networks to small home LANs.
Linux Network Securty focuses on securing Linux in a networked environment, where the
security of the entire network needs to be considered rather than just isolated machines.
It uses a mix of theory and practicl techniques to teach administrators how to install and
use security applications, as well as how the applcations work and why they are necesary.
$ wc testfile # testfile文件的统计信息
3 92 598 testfile # testfile文件的行数为3、单词数92、字节数598
其中&#xff0c;3 个数字分别表示testfile文件的行数、单词数&#xff0c;以及该文件的字节数。
如果想同时统计多个文件的信息&#xff0c;例如同时统计testfile、testfile_1、testfile_2&#xff0c;可使用如下命令&#xff1a;
wc testfile testfile_1 testfile_2 #统计三个文件的信息
输出结果如下&#xff1a;
$ wc testfile testfile_1 testfile_2 #统计三个文件的信息
3 92 598 testfile #第一个文件行数为3、单词数92、字节数598
9 18 78 testfile_1 #第二个文件的行数为9、单词数18、字节数78
3 6 32 testfile_2 #第三个文件的行数为3、单词数6、字节数32
15 116 708 总用量 #三个文件总共的行数为15、单词数116、字节数708
我们可以注意到&#xff0c;每次使用 wc 命令统计文件信息之后&#xff0c;会打印文件名&#xff0c;我们可能有的时候需要将wc统计的内容赋值给变量又不希望带上文件名&#xff0c;就可以使用 cat 组合一下&#xff1a;
$ cat testfile | wc # testfile文件的统计信息
3 92 598 # testfile文件的行数为3、单词数92、字节数598
Linux sed命令是利用script来处理文本文件。
sed可依照script的指令&#xff0c;来处理、编辑文本文件。
Sed主要用来自动编辑一个或多个文件&#xff1b;简化对文件的反复操作&#xff1b;编写转换程序等。
sed [options] &#39;AddressCommand&#39; file ...
参数[options] 说明&#xff1a;
Command&#xff1a;
在testfile文件的第四行后添加一行&#xff0c;并将结果输出到标准输出&#xff0c;在命令行提示符下输入如下命令&#xff1a;
sed -e 4a\newLine testfile
首先查看testfile中的内容如下&#xff1a;
$ cat testfile #查看testfile 中的内容
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
使用sed命令后&#xff0c;输出结果如下&#xff1a;
$ sed -e 4a\newline testfile #使用sed 在第四行后添加新字符串
HELLO LINUX! #testfile文件原有的内容
Linux is a free unix-type opterating system.
This is a linux testfile!
Linux test
newline
将 /etc/passwd 的内容列出并且列印行号&#xff0c;同时&#xff0c;请将第 2~5 行删除&#xff01;
[root&#64;www ~]# nl /etc/passwd | sed &#39;2,5d&#39;
1 root:x:0:0:root:/root:/bin/bash
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
.....(后面省略).....
sed 的动作为 ‘2,5d’ &#xff0c;那个 d 就是删除&#xff01;因为 2-5 行给他删除了&#xff0c;所以显示的数据就没有 2-5 行罗&#xff5e; 另外&#xff0c;注意一下&#xff0c;原本应该是要下达 sed -e 才对&#xff0c;没有 -e 也行啦&#xff01;同时也要注意的是&#xff0c; sed 后面接的动作&#xff0c;请务必以 ” 两个单引号括住喔&#xff01;
只要删除第 2 行
nl /etc/passwd | sed &#39;2d&#39;
要删除第 3 到最后一行
nl /etc/passwd | sed &#39;3,$d&#39;
在第二行后(亦即是加在第三行)加上 drink tea 字样&#xff01;
[root&#64;www ~]# nl /etc/passwd | sed &#39;2a drink tea&#39;
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
drink tea
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....
那如果是要在第二行前
nl /etc/passwd | sed &#39;2i drink tea&#39;
如果是要增加两行以上&#xff0c;在第二行后面加入两行字&#xff0c;例如 Drink tea or ….. 与 drink beer?
[root&#64;www ~]# nl /etc/passwd | sed &#39;2a Drink tea or ......\
> drink beer ?&#39;
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
Drink tea or ......
drink beer ?
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
.....(后面省略).....
每一行之间都必须要以反斜杠『 \ 』来进行新行的添加喔&#xff01;所以&#xff0c;上面的例子中&#xff0c;我们可以发现在第一行的最后面就有 \ 存在。
将第2-5行的内容取代成为『No 2-5 number』呢&#xff1f;
[root&#64;www ~]# nl /etc/passwd | sed &#39;2,5c No 2-5 number&#39;
1 root:x:0:0:root:/root:/bin/bash
No 2-5 number
6 sync:x:5:0:sync:/sbin:/bin/sync
.....(后面省略).....
透过这个方法我们就能够将数据整行取代了&#xff01;
仅列出 /etc/passwd 文件内的第 5-7 行
[root&#64;www ~]# nl /etc/passwd | sed -n &#39;5,7p&#39;
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
可以透过这个 sed 的以行为单位的显示功能&#xff0c; 就能够将某一个文件内的某些行号选择出来显示。数据的搜寻并显示
搜索 /etc/passwd有root关键字的行
nl /etc/passwd | sed &#39;/root/p&#39;
1 root:x:0:0:root:/root:/bin/bash
1 root:x:0:0:root:/root:/bin/bash
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh
4 sys:x:3:3:sys:/dev:/bin/sh
5 sync:x:4:65534:sync:/bin:/bin/sync
....下面忽略
如果root找到&#xff0c;除了输出所有行&#xff0c;还会输出匹配行。
使用-n的时候将只打印包含模板的行。
nl /etc/passwd | sed -n &#39;/root/p&#39;
1 root:x:0:0:root:/root:/bin/bash
删除/etc/passwd所有包含root的行&#xff0c;其他行输出
nl /etc/passwd | sed &#39;/root/d&#39;
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
3 bin:x:2:2:bin:/bin:/bin/sh
....下面忽略
#第一行的匹配root已经删除了
搜索/etc/passwd,找到root对应的行&#xff0c;执行后面花括号中的一组命令&#xff0c;每个命令之间用分号分隔&#xff0c;这里把bash替换为blueshell&#xff0c;再输出这行&#xff1a;
nl /etc/passwd | sed -n &#39;/bash/{s/bash/blueshell/;p;q}&#39;
1 root:x:0:0:root:/root:/bin/blueshell
最后的q是退出。
除了整行的处理模式之外&#xff0c; sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似&#xff01;他有点像这样&#xff1a;
sed &#39;s/要被取代的字串/新的字串/g&#39;
先观察原始信息&#xff0c;利用 /sbin/ifconfig 查询 IP
[root&#64;www ~]# /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
.....(以下省略).....
本机的ip是192.168.1.100。
将 IP 前面的部分予以删除
[root&#64;www ~]# /sbin/ifconfig eth0 | grep &#39;inet addr&#39; | sed &#39;s/^.*addr://g&#39;
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
接下来则是删除后续的部分&#xff0c;亦即&#xff1a; 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
将 IP 后面的部分予以删除
[root&#64;www ~]# /sbin/ifconfig eth0 | grep &#39;inet addr&#39; | sed &#39;s/^.*addr://g&#39; | sed &#39;s/Bcast.*$//g&#39;
192.168.1.100
一条sed命令&#xff0c;删除/etc/passwd第三行到末尾的数据&#xff0c;并把bash替换为blueshell
nl /etc/passwd | sed -e &#39;3,$d&#39; -e &#39;s/bash/blueshell/&#39;
1 root:x:0:0:root:/root:/bin/blueshell
2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
-e表示多点编辑&#xff0c;第一个编辑命令删除/etc/passwd第三行到末尾的数据&#xff0c;第二条命令搜索bash替换为blueshell。
sed 可以直接修改文件的内容&#xff0c;不必使用管道命令或数据流重导向&#xff01; 不过&#xff0c;由於这个动作会直接修改到原始的文件&#xff0c;所以请你千万不要随便拿系统配置来测试&#xff01; 我们还是使用下载的 regular_express.txt 文件来测试看看吧&#xff01;
利用 sed 将 regular_express.txt 内每一行结尾若为 . 则换成 !
[root&#64;www ~]# sed -i &#39;s/\.$/\!/g&#39; regular_express.txt
利用 sed 直接在 regular_express.txt 最后一行加入『# This is a test』
[root&#64;www ~]# sed -i &#39;$a # This is a test&#39; regular_express.txt
由於 $ 代表的是最后一行&#xff0c;而 a 的动作是新增&#xff0c;因此该文件最后新增『# This is a test』&#xff01;
sed 的『 -i 』选项可以直接修改文件内容&#xff0c;这功能非常有帮助&#xff01;举例来说&#xff0c;如果你有一个 100 万行的文件&#xff0c;你要在第 100 行加某些文字&#xff0c;此时使用 vim 可能会疯掉&#xff01;因为文件太大了&#xff01;那怎办&#xff1f;就利用 sed 啊&#xff01;透过 sed 直接修改/取代的功能&#xff0c;你甚至不需要使用 vim 去修订&#xff01;
5、awkAWK是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。
相对于grep的查找&#xff0c;sed的编辑&#xff0c;awk在其对数据分析并生成报告时&#xff0c;显得尤为强大。
简单来说awk就是把文件逐行的读入&#xff0c;&#xff08;空格&#xff0c;制表符&#xff09;为默认分隔符将每行切片&#xff0c;切开的部分再进行各种分析处理。
之所以叫AWK是因为其取了三位创始人 Alfred Aho&#xff0c;Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。
awk [选项参数] &#39;script&#39; var&#61;value file(s)
或
awk [选项参数] -f scriptfile var&#61;value file(s)
选项参数说明&#xff1a;
log.txt文本内容如下&#xff1a;
2 this is a test
3 Are you like awk
This&#39;s a test
10 There are orange,apple,mongo
用法一&#xff1a;
awk &#39;{[pattern] action}&#39; {filenames} # 行匹配语句 awk &#39;&#39; 只能用单引号
实例&#xff1a;
# 每行按空格或TAB分割&#xff0c;输出文本中的1、4项$ awk &#39;{print $1,$4}&#39; log.txt---------------------------------------------2 a3 likeThis&#39;s10 orange,apple,mongo# 格式化输出$ awk &#39;{printf "%-8s %-10s\n",$1,$4}&#39; log.txt---------------------------------------------2 a3 likeThis&#39;s10 orange,apple,mongo
用法二&#xff1a;
awk -F #-F相当于内置变量FS, 指定分割字符
实例&#xff1a;
# 使用","分割$ awk -F, &#39;{print $1,$2}&#39; log.txt---------------------------------------------2 this is a test3 Are you like awkThis&#39;s a test10 There are orange apple# 或者使用内建变量$ awk &#39;BEGIN{FS&#61;","} {print $1,$2}&#39; log.txt---------------------------------------------2 this is a test3 Are you like awkThis&#39;s a test10 There are orange apple# 使用多个分隔符.先使用空格分割&#xff0c;然后对分割结果再使用","分割$ awk -F &#39;[ ,]&#39; &#39;{print $1,$2,$5}&#39; log.txt---------------------------------------------2 this test3 Are awkThis&#39;s a10 There apple
用法三&#xff1a;
awk -v # 设置变量
实例&#xff1a;
$ awk -va&#61;1 &#39;{print $1,$1&#43;a}&#39; log.txt---------------------------------------------2 33 4This&#39;s 110 11$ awk -va&#61;1 -vb&#61;s &#39;{print $1,$1&#43;a,$1b}&#39; log.txt---------------------------------------------2 3 2s3 4 3sThis&#39;s 1 This&#39;ss10 11 10s
用法四&#xff1a;
awk -f {awk脚本} {文件名}
实例&#xff1a;
$ awk -f cal.awk log.txt
运算符 | 描述 |
---|---|
&#61; &#43;&#61; -&#61; *&#61; /&#61; %&#61; ^&#61; **&#61; | 赋值 |
?: | C条件表达式 |
|| | 逻辑或 |
&& | 逻辑与 |
~ ~! | 匹配正则表达式和不匹配正则表达式 |
<<&#61; > >&#61; !&#61; &#61;&#61; | 关系运算符 |
空格 | 连接 |
&#43; – | 加&#xff0c;减 |
* / % | 乘&#xff0c;除与求余 |
&#43; – ! | 一元加&#xff0c;减和逻辑非 |
^ *** | 求幂 |
&#43;&#43; — | 增加或减少&#xff0c;作为前缀或后缀 |
$ | 字段引用 |
in | 数组成员 |
过滤第一列大于2的行
$ awk &#39;$1>2&#39; log.txt #命令
#输出
3 Are you like awk
This&#39;s a test
10 There are orange,apple,mongo
过滤第一列等于2的行
$ awk &#39;$1&#61;&#61;2 {print $1,$3}&#39; log.txt #命令
#输出
2 is
过滤第一列大于2并且第二列等于’Are’的行
$ awk &#39;$1>2 && $2&#61;&#61;"Are" {print $1,$2,$3}&#39; log.txt #命令
#输出
3 Are you
变量 | 描述 |
---|---|
\$n | 当前记录的第n个字段&#xff0c;字段间由FS分隔 |
\$0 | 完整的输入记录 |
ARGC | 命令行参数的数目 |
ARGIND | 命令行中当前文件的位置(从0开始算) |
ARGV | 包含命令行参数的数组 |
CONVFMT | 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组 |
ERRNO | 最后一个系统错误的描述 |
FIELDWIDTHS | 字段宽度列表(用空格键分隔) |
FILENAME | 当前文件名 |
FNR | 各文件分别计数的行号 |
FS | 字段分隔符(默认是任何空格) |
IGNORECASE | 如果为真&#xff0c;则进行忽略大小写的匹配 |
NF | 输入字段分割符 |
NR | 已经读出的记录数&#xff0c;就是行号&#xff0c;从1开始 |
OFMT | 数字的输出格式(默认值是%.6g) |
OFS | 输出记录分隔符&#xff08;输出换行符&#xff09;&#xff0c;输出时用指定的符号代替换行符 |
ORS | 输出记录分隔符(默认值是一个换行符) |
RLENGTH | 由match函数所匹配的字符串的长度 |
RS | 记录分隔符(默认是一个换行符) |
RSTART | 由match函数所匹配的字符串的第一个位置 |
SUBSEP | 数组下标分隔符(默认值是/034) |
$ awk &#39;BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}&#39; log.txt
FILENAME ARGC FNR FS NF NR OFS ORS RS
---------------------------------------------
log.txt 2 1 5 1
log.txt 2 2 5 2
log.txt 2 3 3 3
log.txt 2 4 4 4
$ awk -F\&#39; &#39;BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}&#39; log.txt
FILENAME ARGC FNR FS NF NR OFS ORS RS
---------------------------------------------
log.txt 2 1 &#39; 1 1
log.txt 2 2 &#39; 1 2
log.txt 2 3 &#39; 2 3
log.txt 2 4 &#39; 1 4
# 输出顺序号 NR, 匹配文本行号
$ awk &#39;{print NR,FNR,$1,$2,$3}&#39; log.txt
---------------------------------------------
1 1 2 this is
2 2 3 Are you
3 3 This&#39;s a test
4 4 10 There are
# 指定输出分割符
$ awk &#39;{print $1,$2,$5}&#39; OFS&#61;" $ " log.txt
---------------------------------------------
2 $ this $ test
3 $ Are $ awk
This&#39;s $ a $
10 $ There $
# 输出第二列包含 "th"&#xff0c;并打印第二列与第四列
$ awk &#39;$2 ~ /th/ {print $2,$4}&#39; log.txt
---------------------------------------------
this a
~ 表示模式开始。// 中是模式。
# 输出包含"re" 的行
$ awk &#39;/re/ &#39; log.txt
---------------------------------------------
3 Are you like awk
10 There are orange,apple,mongo
$ awk &#39;BEGIN{IGNORECASE&#61;1} /this/&#39; log.txt
---------------------------------------------
2 this is a test
This&#39;s a test
$ awk &#39;$2 !~ /th/ {print $2,$4}&#39; log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo
$ awk &#39;!/th/ {print $2,$4}&#39; log.txt
---------------------------------------------
Are like
a
There orange,apple,mongo
关于awk脚本&#xff0c;我们需要注意两个关键词BEGIN和END。
假设有这么一个文件&#xff08;学生成绩表&#xff09;&#xff1a;
$ cat score.txt
Marry 2143 78 84 77
Jack 2321 66 78 45
Tom 2122 48 77 71
Mike 2537 87 97 95
Bob 2415 40 57 62
我们的awk脚本如下&#xff1a;
$ cat cal.awk
#!/bin/awk -f
#运行前
BEGIN {math &#61; 0english &#61; 0computer &#61; 0printf "NAME NO. MATH ENGLISH COMPUTER TOTAL\n"printf "---------------------------------------------\n"
}
#运行中
{math&#43;&#61;$3english&#43;&#61;$4computer&#43;&#61;$5printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3&#43;$4&#43;$5
}
#运行后
END {printf "---------------------------------------------\n"printf " TOTAL:%10d %8d %8d \n", math, english, computerprintf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}
我们来看一下执行结果&#xff1a;
$ awk -f cal.awk score.txt
NAME NO. MATH ENGLISH COMPUTER TOTAL
---------------------------------------------
Marry 2143 78 84 77 239
Jack 2321 66 78 45 189
Tom 2122 48 77 71 196
Mike 2537 87 97 95 279
Bob 2415 40 57 62 159
---------------------------------------------TOTAL: 319 393 350
AVERAGE: 63.80 78.60 70.00
AWK的hello world程序为&#xff1a;
BEGIN { print "Hello, world!" }
计算文件大小
$ ls -l *.txt | awk &#39;{sum&#43;&#61;$6} END {print sum}&#39;
--------------------------------------------------
666581
从文件中找出长度大于80的行
awk &#39;lengh>80&#39; log.txt
打印九九乘法表
seq 9 | sed &#39;H;g&#39; | awk -v RS&#61;&#39;&#39; &#39;{for(i&#61;1;i<&#61;NF;i&#43;&#43;)printf("%dx%d&#61;%d%s", i, NR, i*NR, i&#61;&#61;NR?"\n":"\t")}&#39;
统计报表&#xff1a;合计每人1月工资&#xff0c;0&#xff1a;manager&#xff0c;1&#xff1a;worker
文件内容如下&#xff1a;
[root&#64;node0001 ~]# cat awk_label.txt
Tom 0 2012-12-11 car 3000
John 1 2013-01-13 bike 1000
Vivi 1 2013-01-18 car 2800
Tom 0 2013-01-20 car 2500
John 1 2013-01-28 bike 3500
处理结果&#xff1a;
[root&#64;node0001 ~]# awk &#39;{split($3,date,"-");if(date[2]&#61;&#61;"01"){name[
$1]&#43;&#61;$5;if($2&#61;&#61;"0"){role[$1]&#61;"M"}else{role[$1]&#61;"W"}}} END{for(i in name){print i "\t" name[i]"\t" role[i]}}&#39; awk_label.txtTom 2500 M
John 4500 W
Vivi 2800 W
更多详细内容可以查看 AWK 官方手册&#xff1a;http://www.gnu.org/software/gawk/manual/gawk.
awk、sed、grep更适合的方向&#xff1a;
关于awk内建变量个人见解&#xff0c;简单易懂
解释一下变量&#xff1a;
变量&#xff1a;分为内置变量和自定义变量;输入分隔符FS和输出分隔符OFS都属于内置变量。
内置变量就是awk预定义好的、内置在awk内部的变量&#xff0c;而自定义变量就是用户定义的变量。
自定义变量的方法