私のファイルには、次のようにパイプで区切られた行が含まれています。
45|abc|NULL|hol|
Gha|ghsk|NULL|gah|
3番目の列の値(空)をハイフン(-)などの値に置き換えるにはどうすればよいですか? 3番目の列の値は一意ではありません。助けてくれてありがとう。
答え1
awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' file
|
ファイルの区切り文字を保持するには、入力フィールドと出力フィールドの区切り文字を設定します。- 3番目のフィールドが「NULL」と等しいかどうかを確認し、そうでない場合は値を割り当て、
-
値を残します。 1
最後に、テストが成功したかどうかに応じて、3番目の列を変更または変更せずに行を印刷します。($3=="NULL"?"-":$3)
$3=="NULL"
条件が真であることを確認するために使用される三項演算子です。 true の場合は?
割り当て-
、 false の場合は:
フィールドを変更せずにそのままにします。
テスト
$ cat positioned
45|abc|NULL|hol|
Gha|ghsk|NULL|gah
$ awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' positioned
45|abc|-|hol|
Gha|ghsk|-|gah
$ cat positioned
45|abc|NULL|hol|
Gha|ghsk|NULL|gah
95|xyz|NonNULL|hol|
asdf|ghsk|NonNULL|afs|
$ awk -F'|' '{ $3 = ($3 == "NULL" ? "-" : $3) } 1' OFS='|' positioned
45|abc|-|hol|
Gha|ghsk|-|gah
95|xyz|NonNULL|hol|
asdf|ghsk|NonNULL|afs|