特定の列のパターンマッチングとawkを使用して見つかったマッチング項目の更新については、ヘルプが必要です。

特定の列のパターンマッチングとawkを使用して見つかったマッチング項目の更新については、ヘルプが必要です。

Linuxには次のファイルがありますraw.csv

_id,field_name,field_friendly_name,purpose_of_use,category
1,customer_ip_address_nbr,,Ab,cd
2,customer_ipaddress,,Ab,cd
3,customer_ipaddress,,Ab,cd
4,Shipaddress,,Ab,cd
5,Ship_Ip_adress,,Ab,cd
6,Ipaddress,,Ab,cd
7,xyz,,Ab,cd

2番目の列がこの条件を満たすすべての行を印刷したいと思います。

(「ip」を含む、「住所」を含む)および(「配送」を除く)

私は試した:

awk ' $2 = ((/ip/ && addres) && !(ship)) print $1,$2,$3="IP address",$4,45 raw.csv

希望の出力:

_id,field_name,field_friendly_name,purpose_of_use,category
1,customer_ip_address_nbr,IP address,Ab,cd
2,customer_ipaddress,IP address,Ab,cd
3,customer_ipaddress,IP address,Ab,cd
5,Ship_Ip_adress,IP address,Ab,cd
6,Ipaddress,IP address,Ab,cd

ベストアンサー1

$ awk -F , 'BEGIN { OFS=FS } FNR == 1 { print; next } /[iI]p/ && /[aA]ddress/ && !/[sS]hip/ { $3 = "IP address"; print }' file
_id,field_name,field_friendly_name,purpose_of_use,category
1,customer_ip_address_nbr,IP address,Ab,cd
2,customer_ipaddress,IP address,Ab,cd
3,customer_ipaddress,IP address,Ab,cd
6,Ipaddress,IP address,Ab,cd

これにより、ファイルの最初の行が無条件に印刷されます。

次に、いくつかのパターンをテストして、最初の文字の大文字と小文字のバリエーションが許可されていることを確認します。テストを経てShip完了shipしたので本物パターンならいいえ(および!)と一致します。

行がすべてのテストに合格すると、3番目の列が更新され、変更された行が印刷されます。

一致させたい部分文字列が列2で一致する場合ただをクリックし、その列の内容に対してテストを実行します。

awk -F , '
    BEGIN    { OFS=FS }
    FNR == 1 { print; next }
    $2 ~ /[iI]p/ && $2 ~ /[aA]ddress/ && $2 !~ /[sS]hip/ {
        $3 = "IP address"
        print
    }' file

!~最後のテストでの使用を記録してください。

これは、すべて入力iffileが次のようになると仮定します。シンプルなCSVつまり、フィールドにカンマや改行は含まれていません(CSVファイルで正しく引用されたフィールドでは許可されています)。

おすすめ記事