web-dev-qa-db-ja.com

ファイルの特定の列にある特定の条件の値を置き換える方法

パイプ|でファイルを分離しましたが、列6に文字I print0758000が列7に含まれている場合と列6に文字A print0800000が列7に含まれている場合に見つかりませんどうやってするの!!!

例:

元のファイル

cat file1.txt
Z89|EEE333333|100001|JANMC84|19990101|I|1800040
Z89|EEE444444|200001|JANMC84|19990101|I|1800040
Z89|EEE222222|300001|JANMC84|19990101|A|1800040
Z89|EEE555555|700001|JANMC84|19990101|A|1800040

結果は次のようになります。

Z89|EEE333333|100001|JANMC84|19990101|I|0758000
Z89|EEE444444|200001|JANMC84|19990101|I|0758000
Z89|EEE222222|300001|JANMC84|19990101|A|0800000
Z89|EEE555555|700001|JANMC84|19990101|A|0800000
2
Miguel Angel

あなたは次のようなawkでそれを行うことができます

awk -F\| 'BEGIN {OFS=FS} $6 == "A" {$7 = "0800000"} $6 == "I" {$7 = "0758000"}; 1' file1.txt

これには、|に基づいてawk分割フィールドがあり、行を書き戻すときに出力フィールドセパレータも|に設定します。次に、6番目のフィールド$6Aの場合、7番目のフィールドを特定の値に置き換え、Iの場合は別の値に置き換えます。次に、最後に行を出力します。なんでも作った。

1
Eric Renouf

sedの場合:

sed -e 's/\(I|\)[^|]*$/\10758000/;s/\(A|\)[^|]*$/\10800000/' file1.txt

重要なのは、sI|またはA|(つまり最後の列)の後に続くすべてのものを希望の番号に置き換えることです。

結果:

Z89|EEE333333|100001|JANMC84|19990101|I|0758000
Z89|EEE444444|200001|JANMC84|19990101|I|0758000
Z89|EEE222222|300001|JANMC84|19990101|A|0800000
Z89|EEE555555|700001|JANMC84|19990101|A|0800000
0
jimmij
SLPJP_Box                                                        11/03/2017 22:00:07  -----                RU 13232789/1
 SLPJP_PRD_SOB_MAIN                                              09/07/2017 22:00:30  09/07/2017 22:00:57  OI 11769239/1 0
 SLPJP_PRD_SOD_BOX                                               11/03/2017 22:00:18  -----                RU 13232789/1
  SLPJP_PRD_SOD_001                                              11/03/2017 22:00:34  11/03/2017 23:10:25  SU 13232789/1 0
  SLPJP_PRD_SOD_002                                              11/03/2017 23:10:26  -----                RU 13232789/1
  SLPJP_PRD_SOD_003                                              -----                11/02/2017 22:18:34  AC 13232789/0
  SLPJP_PRD_SOD_004                                              -----                11/02/2017 22:19:55  AC 13232789/0

すべての列を印刷したいのですが、すべての列SU、OI、AC列を削除し、すべての空白のスペースを任意のセパレーターに削除します

0
Nitin Jain