cat Data.log
REPLICAT RUNNING RPGUJ3 02:00:12 00:00:06
REPLICAT RUNNING RPGUJ4 00:00:10 00:00:06
REPLICAT RUNNING RPGUJ3_3 01:00:11 00:00:00
REPLICAT RUNNING RPGUJ4_3 00:00:12 00:00:06
4列から1時間以上の値を3列に印刷したいです。次のように出力します。
RPGUJ3
RPGUJ3_3
私は1つのファイルから列3と4の出力を取得しようとします。
cat Data.log | awk '{print $3 " " $4}' >1.out
cat 1.out
RPGUJ3 02:00:12
RPGUJ4 00:00:10
RPGUJ3_3 01:00:11
RPGUJ4_3 00:00:12
しかし印刷できません。
RPGUJ3
RPGUJ3_3
答え1
$ 4の最初の2桁の数字が次のようになっていることを確認してください00
。
awk 'substr ($4, 1, 2) != "00" { print $3; }' Data.log > 1.out
awk
独自のデータファイルを読み取ることができます。cat
パイプは必要ありません。
$ cat Data.log
REPLICAT RUNNING RPGUJ3 02:00:12 00:00:06
REPLICAT RUNNING RPGUJ4 00:00:10 00:00:06
REPLICAT RUNNING RPGUJ3_3 01:00:11 00:00:00
REPLICAT RUNNING RPGUJ4_3 00:00:12 00:00:06
$ awk 'substr ($4, 1, 2) != "00" { print $3; }' Data.log > 1.out
$ cat 1.out
RPGUJ3
RPGUJ3_3
$
答え2
awkを使用してください。
$ awk '$4+0{print $3}' Data.log
RPGUJ3
RPGUJ3_3
toを追加すると、0
awk$4
に02:00:12
文字列(たとえば)を数値に変換するように指示します。まず、先行番号の後のすべての項目を削除してこれを行います。この場合、最初の数字で始まるので:
結果はです2
。その後、その結果番号を条件として使用すると、結果があればfalseになり0
、そうでない場合はtrueになりますC
。これは他の言語と同様に次のようになります。
$ awk '{print $4, "->", $4+0, "->", ($4+0 ? "true" : "false")}' Data.log
02:00:12 -> 2 -> true
00:00:10 -> 0 -> false
01:00:11 -> 1 -> true
00:00:12 -> 0 -> false