Linuxの - 複雑なコマンドのawkの条件に沿って列傍受

切り捨てられた列複雑な条件でawkコマンドライン

コマンド構文 AWK  条件1  {1}操作 条件は、2  {操作} 2 ...ファイル名
コマンド条件
 通常条件との関係式を用いて
 変数xが10以上であるか否かを、X> 10判定する
 X> = 10は、変数よりも大きいか否かを判定するそれは10に等しい
 X <= 10は、変数が10に等しい以下であるか否かを判断するコマンドアクション
 出力をフォーマット({Nのprintf $}のn番目の列を表し、$ nはn番目の列が表す)
 制御ステートメントフローコマンドアクション:複雑なコマンドAWKであります、内部の複雑なプログラミング操作を実行します。

例:
[root@192 cut]# cat score.txt
Id	Name	Gender	Score
1	zhangsan	M	90
2	lisi	M	88
3	wangwu	M	98
4	zhaoliu	N	97
5	NangongYi	M	100
例:2,4のコンテンツの利用はawkコマンド列出力形式
[root@192 cut]# awk '{printf $2 "\t" $4 "\n"}' score.txt
Name	Score
zhangsan	90
lisi	88
wangwu	98
zhaoliu	97
NangongYi	100
[root@192 cut]#
注:テキストの終わりまで、第2および第1行目の4列を抽出し、第3行の第4列に続く第2行目の4列を抽出することであるAWK抽出カラム。
例:私は、現在のルートシステムのディスク容量を取得したいです
[root@192 cut]# df -h
文件系统	      容量  已用  可用 已用%% 挂载点
/dev/sda3              17G  2.6G   14G  17% /
tmpfs                 499M     0  499M   0% /dev/shm
/dev/sda1             985M   40M  896M   5% /boot

A、先提取df -h 命令输出的第一行
[root@192 cut]# df -h | grep sda3
/dev/sda3              17G  2.6G   14G  17% /
[root@192 cut]#

B、再提取A结果的第五列
[root@192 cut]# df -h | grep sda3 | awk '{print $5}'
17%
[root@192 cut]#

C、以”%”为分隔符,获取第一个元素
[root@192 cut]# df -h | grep sda3 | awk '{print $5}' | cut -d "%" -f 1
17
[root@192 cut]#
ベギン
役割:条件だけ満たすためには、実行を開始する前にこの状態をBEGIN。彼は、任意の出力の前に、出力内容は、後にBEGINと言いました。その後、他のアクションを処理します。
实例:awkのBEGIN {printfの "これが新しい始まり\ nは!"} {のprintf $ 2 "\トン" $ 4 "\ n" は} 'score.txt
[root@192 cut]# awk 'BEGIN {printf "this is new begin!\n"} {printf $2 "\t" $4 "\n"}' score.txt
this is new begin!
Name	Score
zhangsan	90
lisi	88
wangwu	98
zhaoliu	97
NangongYi	100
[root@192 cut]#
だから、最終的に役割がどこであるBEGIN?見下す:FSは組み込み変数:セパレータの定義 
アクションを:区切り文字を指定


例:passwdファイルから非システムユーザのすべてを取得する - 猫/ etc / passwdファイル| grepを "/ binに/ bashの" | awkの '{FS = ":"} {printfの$ 1 "\トン" $ 3 "\ n" を}'
[root@192 cut]# cat /etc/passwd | grep "/bin/bash" | awk '{FS=":"} {printf $1 "\t" $3 "\n"}'
root:x:0:0:root:/root:/bin/bash
user1	500
user2	501
user3	502
[root@192 cut]#
注意深い観察:私たちは、最初の行は、出力出ていることがわかりました。これはなぜでしょうか?オリジナル、AWK、コマンド操作を行う場合、データの最初の行の最初に読み込まれ、そして。
例:passwdファイルから非システムユーザのすべてを取得し、最初の行を削除する - 猫/ etc / passwdファイル| grepを "/ binに/ bashの" | awkのBEGIN {FSを= ":"} {printfの$ 1 "\トン" $ 3 "\ n" は}」
[root@192 cut]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
root	0
user1	500
user2	501
user3	502
[root@192 cut]#
注:
1、AWKデフォルトのセパレータ「スペース」、「タブ」を識別することができる、しかし、現実には、我々はセパレータを参照してください、より多くのこれらよりも、私たちは実際の状況を必要とすることができる、指定され、そのFSで使用された場合、コマンドawkの変数の区切り文字を指定するために使用されます。
図2に示すように、それを処理したので、最初のラインデータこと、再度処理、データを読み出す前に、最初の行、第1セパレータの書き込み動作を示し始めます。マニュアルセグメンテーション、一般およびFS共存。
終わり
役割:実行したコマンドでは、文字コンテンツ出力ENDを同定しました。
例: "終了" 第4列を得るscore.txtファイルから、最終的な出力 -  AWK 'END {printfの "終了する\ n"} {printfの$ 2 "\ T" $ 4 "\ n"} score.txt
[root@192 cut]# awk 'END {printf "The End\n"} {printf $2 "\t" $4 "\n"}' score.txt
Name	Score
zhangsan	90
lisi	88
wangwu	98
zhaoliu	97
NangongYi	100
The End
[root@192 cut]#
関係演算子
例:ファイルscore.txtから100ポイントのユーザースコアを取得
A、过滤掉不用的行 cat score.txt | grep -v Name
[root@192 cut]# cat score.txt | grep -v Name
1	zhangsan	M	90
2	lisi	M	88
3	wangwu	M	98
4	zhaoliu	N	97
5	NangongYi	M	100
[root@192 cut]#

B、对第4列运算,结果输出第2列  cat score.txt | grep -v Name | awk '$4>=100 {printf $2 "\n"}'
[root@192 cut]# cat score.txt | grep -v Name | awk '$4>=100 {printf $2 "\n"}'
NangongYi
[root@192 cut]#
公開された59元の記事 ウォンの賞賛2 ビュー5571

おすすめ

転載: blog.csdn.net/LDR1109/article/details/102957643