awkや他の方法を使用するのに役立ちますか?
入力ファイルには次の内容が含まれています。
PROD 192.168.100.25 Unix Active
PROD 192.168.100.26 Unix - Server Active
DEV 192.168.100.27 windows Gateway Active
TEST 192.168.100.28 Unix Test Server Not Active
PROD 192.168.100.29 windows mail gateway Active down
PROD 192.168.100.30 Unix Active down
今awkを使用して列2と4を取得します。以下を参照してください。
awk '{print $2 $4}' Inputfile
結果 -
192.168.100.25 Active
192.168.100.26 -
192.168.100.27 Gateway
192.168.100.28 Test
192.168.100.29 mail
192.168.100.30 Active
予想される結果 -
192.168.100.25 Active
192.168.100.26 Active
192.168.100.27 Active
192.168.100.28 Not Active
192.168.100.29 Active down
192.168.100.30 Active down
ベストアンサー1
デフォルトでは、AWK のフィールドはスペースで区切られます。空白がどれだけ多いかは関係ありませんので、次のファイルは同じ結果を提供します。
PROD 192.168.100.25 Unix Active
PROD 192.168.100.26 Unix - Server Active
この2行の4番目のフィールドは明らかにActive
sumです-
。
これで、ファイル形式は実際には次のようになります。フィールドはタブで区切られ、その間にはスペースのみが含まれます。 SEに公開した後、タブは保持されないと思われます。
そうすれば、線はより似ているように見えます。
PROD<tab>192.168.100.26<tab>Unix - Server<tab><tab>Active
次のようにタブを区切り文字として使用するようにAWKに指示できます。
$ awk -F '\t+' '{print $2, $4}' file.txt
192.168.100.25 Active
192.168.100.26 Active
しかし、各フィールドの間にタブを置く方が一般的です。つまり、可変長データとうまく合わない。それからawk -F '\t'
。
列が実際に固定幅の場合は、次を使用してcut
必要な部分を選択できます。ただし、この場合は文字を手動で計算する必要があります。
1 2 3 4 5 6 7
1234567890123456789012345678901234567890123456789012345678901234567890
PROD 192.168.100.29 windows mail gateway Active down
上記の数で判断すると、次のように動作できます。
$ cut -c8-23,52-70 file-fixed.txt
192.168.100.25 Active
192.168.100.26 Active
192.168.100.27 Active
192.168.100.28 Not Active
192.168.100.29 Active down
192.168.100.30 Active down
少なくとも、GNU AWKは固定幅フィールドもサポートしていますが、これについては深く調査していません。バラよりhttps://www.gnu.org/software/gawk/manual/html_node/Fixed-width-data.html