Linux での awk コマンドの一般的な使用法

awkは Linux で非常に重要な言語です.パターン スキャンおよびテキスト処理言語です. grep の方がなじみがあるかもしれませんが, これもテキスト処理に属します. このセクションでは主に awk の使用法を紹介します.以前の記事でご存知の方は、 JetsonNano 上の拡張ボードの OLED ディスプレイの使用 (IP、メモリ、CPU などのリアルタイム表示) にawk コマンドが登場しており、その良い例です。 .

vi test

テストする次の内容を入力し、Escを押してwqと入力し、Enterを押して保存します。

テストのために一部のコンテンツを再入力する場合は、それらをすべて削除し、Escを押して: 1,.d と入力し、 Enterを押します。

ファイルテストの内容は次のとおりです。

Tony-ChyiChin-GoodMan-Nice
你好-中国
VERY GOOD
123456789
I love you

-F「区切り文字」

デフォルトでは、区切り文字としてスペースを使用します。これは、区切り文字を指定せずに次のようにすることができます

awk '{ print $0 }' test

これは猫のテストと同じです

次に、次の結果を見てください。

awk '{ print $1 }' test
awk '{ print $2 }' test
awk '{ print $3 }' test

1つ以上のスペースの場合、複数のスペースを表示する必要がありますが、どのように対処すればよいですか?

cat t.txt
a b  c   d

ここに 1 つのスペース、2 つのスペース、3 つのスペースがあります。

awk '{print $1$2$3$4}' t.txt #abcd
awk -F[[:space:]] '{print $1$2$3$4}' t.txt #a b  c   d

ルールが見えます.パターンマッチング言語なので,実は正規表現と同じです.デフォルトでは各行をスペースで区切ってグループ化しています.各グループは個別に取得できます.output

もちろん、-F を使用してセパレーターを指定することもできます。たとえば、次のように "-" を使用してテキストの各行を区切ります。

awk -F"-" '{ print $1 }' test
awk -F"-" '{ print $2 }' test
awk -F"-" '{ print $3 }' test
awk -F"-" '{ print $4 }' test

複数の区切り文字を指定する

たとえば、次の正規表現は、1 つ以上のスペース、または「-」または「,」で区切ることを意味します。ここで、[] の後ろの + 記号は正規表現に慣れており、1 つ以上を意味します。

awk -F '[ -,]+' '{print $1" "$3}' test
'''
aaaa ccc
Tony-ChyiChin-GoodMan-Nice 
你好-中国 
VERY 
123456789 
I you
'''

其中这里的内容我修改了,增加了aaaa,bbb,ccc,ddd,eeee这样一行,尤其注意观察第一行和最后一行,可以看到第一行是逗号隔开了,最后一行是空格隔开,然后取第一个和第三个。

if条件

如果文本内容行数很多,我们可以选择性打印想要查看的行数内容

大于1行小于等于4行的所有内容,这里的NR就表示读取记录的行数

awk '{if(NR>1 && NR<=4) print $0}' test
'''
你好-中国
VERY GOOD
123456789
'''

BEGIN END

BEGIN END可以做一些统计,比如说统计账户数:

awk 'BEGIN {count=0;print "[start] user count is ",count}{count++;print $0;} END{print "user count is ",count}' /etc/passwd
'''
[start] user count is  0
root:x:0:0:root:/root:/bin/bash
......
user count is  41
'''

当然一行比较长的话,可以在一行的后面使用"\"反斜杠符号,这样就可以将其余部分写到下面一行来,比如统计上面test文件里的内容有多少行:

awk 'BEGIN{count=0;print "[start] line count is ",count} \
{count+=1;print $0} \
END{print "[end] line count is ",count}' test

关系运算符

布尔运算,逗号隔开是一个表达式,真为1,假为0

awk 'BEGIN{a=2;b=3;print (a+b>4,a*b==6,a-b>0||a>1,a-b>0&&a>1)}' #1 1 1 0

赋值运算

awk 'BEGIN{a=1;a+=2;b=-8;print a+b}'

正则表达式

awk 'BEGIN{a="23hello";if(a~/23[h]/) {print "Yes"}}' #Yes
awk 'BEGIN{a="23hello";if(a~/d*[h]/) {print "Yes"}}' #Yes

gsub替换,将数字替换成"**"

awk 'BEGIN{info="Godfather 1 released on March 24, 1972";gsub(/[0-9]+/,"**",info);print info}'
#Godfather ** released on March **, **

查找字符串是否存在

awk 'BEGIN{info="Godfather 1 released on March 24, 1972";print index(info,"father")?"ok":"not found";}'
#ok

查找是否包含数字

awk 'BEGIN{info="Godfather 1 released on March 24, 1972";print match(info,/[0-9]+/)?"ok":"not found";}'
#ok

截取字符串

awk 'BEGIN{info="Godfather 1 released on March 24, 1972";print substr(info,5,10);}'
#ather 1 re

当然awk的功能远不止这些,不过对于平时的一些操作来说基本可以满足了

おすすめ

転載: blog.csdn.net/weixin_41896770/article/details/129792529