Linux/Solaris でファイルの位置指定値を置き換える方法

Linux/Solaris でファイルの位置指定値を置き換える方法

私のファイルには、次のようにパイプで区切られた行が含まれています。

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|

関連情報