このようなサンプルファイルがあります。
Zone A
Total Population 500 unit
Total Area 150 sq. unit
Zone B
Total Population 600 unit
Total Area 200 sq. unit
Zone C
Total Population 400 unit
Total Area 100 sq. unit
以下のように地域名と人口を抽出するには?
A
500
B
600
C
400
答え1
これはawkにとってマイナーな作業です。
awk '/Zone/{print $2} /Population/{print $3}' file
Zone
現在の行にフィールドがある場合は、2番目のフィールドを印刷し、3番目のフィールドをPopulation
印刷します。
答え2
この試み、
awk '/Zone/ {print $2;getline; print $3}' file
A
500
B
600
C
400
getline
現在の行の後の次の行を読みます。
答え3
grep
Perl互換正規表現(PCRE)を使用してください。
grep -Po 'Zone \K.*|[0-9]+(?= unit)' file
-P
Perl互換正規表現の有効化-o
一致する部分のみ印刷Zone \K.*
文字(.*
)の後にZone
スペース文字が続くすべての文字と一致します。それ以前の内容はすべて\K
印刷されません(幅0の前方ナビゲーション)。|
または[0-9]+(?= unit)
空白文字と後に続く1つ以上の数字と一致しますunit
。幅がゼロの(?= unit)
前方予測アサーションであり、対応するパターン(スペース文字とunit
)も印刷されません。
答え4
次のコマンドで交換してくださいsed
。
$ sed -En '/Zone/N; s/Zone ([A-Z]+).+ ([0-9]+).*/\1\n\2/p' file
A
500
B
600
C
400
カバーシェル「地域名」+「地域値」:
$ sed -En '/Zone/N;N; s/Zone ([A-Z]+).+ ([0-9]+) sq.*/\1\n\2/p' file
A
150
B
200
C
100