
パイプで区切られたファイルがありますが、|
6列に7列の文字が含まれていて、6列に7列の文字が含まれていればI
印刷したいのですが、どうすればいいかわかりません!0758000
A
0800000
例:
オリジナルファイル
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
答え1
awkを使用してこれを行うことができます。
awk -F\| 'BEGIN {OFS=FS} $6 == "A" {$7 = "0800000"} $6 == "I" {$7 = "0758000"}; 1' file1.txt
これは、フィールドを分割してawk
行を書き換えるときに|
出力フィールド区切り文字を設定することに基づいています。|
次に、6番目のフィールドの場合は$6
7A
番目のフィールドを特定の値に置き換え、Iの場合は別の値に置き換えます。その後、変更(もし変更した場合)を含む行が最後に印刷されます。
答え2
そしてsed
:
sed -e 's/\(I|\)[^|]*$/\10758000/;s/\(A|\)[^|]*$/\10800000/' file1.txt
要点は、or(つまり最後の列)s
の後のすべての内容を目的の数字に置き換えることです。I|
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
答え3
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列をすべて削除し、区切り文字のある空のスペースをすべて削除したいと思います。