00
パイプで区切られたファイルでスペースを置き換える必要がありますが、5番目のパイプの後に表示される場合にのみ可能です00
。私はLinuxを使用しています。私は試した:{sed 's/00/\ /6' input.txt > output.txt}
サンプル:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|00
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
私は次の結果が欲しい:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHJ|Y
ABC|DE|GGH|N|FFHK|N
ABC|DE|GGH|OO|FFHU|
答え1
提供した例では、必要なものは次のとおりです。
$ sed 's/|00$/|/' file
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
または、6つ以上のフィールド入力に対してより強力で柔軟です。
$ awk 'BEGIN{FS=OFS="|"} $6=="00"{$6=""} 1' file
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
答え2
使用幸せ(以前のPerl_6)
raku -pe 's:pos($/.from)/ \| 00 /| / if m:5th/ \| /;'
または
raku -pe 's:pos($/.from)[ \| 00 ] = "| " if m:5th[ \| ];'
入力例:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|00
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
出力例:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
Rakuは、:nth
検索したい一致(たとえば、、、など:1st
):2nd
を指定できる「副詞」正規表現パラメータを実装します。:nth(5)
上記のRakuコードは、位置m:5th
(|
パイプ文字検出)の一致と置換項目を組み合わせて、s:pos($/.from)
一致変数の位置で一致検索を開始します。$/.from
したがって、5番目と一致すると、|
その場所がに保存されます$/.from
。\| 00
その場所で$/.from
正規表現を見つけたら空白に置き換えます。それ以外の場合は、2番目のデータ行の3番目の文字の後に表示される
00
ように、文字は変更されずにそのまま残ります。|
[注:「初期」列をすべて変更せずにそのままにして「後で」列のみを変更するには、副詞の代わり:continue
に:pos
副詞を使用してください。]
https://docs.raku.org/言語/regexes#index-entry-matching_adverb_:pos-matching_adverb_:p-Pos
https://raku.org
答え3
sed "s/\(\(.*|\)\{5\}[^0]*\)00/\1 /" <input.txt
意味:
\(\(.*|\)\{5\}
: スラッシュ5個
[^0]*
5番目のスラッシュ以降はゼロではありません。
all to \1 は \1 と 2 つの 0 を印刷します。
入力例:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|rZZ00r
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|
出力例:
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|rZZ r
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|