(タブを意味)で区切られたa^I^I^I^I^I^I^Ib^Ic
のような行を持つデータファイルがあります。タブで区切られたファイルの空のフィールドを "0"に置き換えてください
ここで、各列の空の値を0に変更したいので、結果はa^I0^I0^I0^I0^I0^I0^Ib^Ic
のようになります。
1つのsedコマンドでどのように達成できますか?
(タブを意味)で区切られたa^I^I^I^I^I^I^Ib^Ic
のような行を持つデータファイルがあります。タブで区切られたファイルの空のフィールドを "0"に置き換えてください
ここで、各列の空の値を0に変更したいので、結果はa^I0^I0^I0^I0^I0^I0^Ib^Ic
のようになります。
1つのsedコマンドでどのように達成できますか?
これは先読みをサポートするツールを使用して行うことが容易である:
perl -pe 's/\t(?=\t)/\t0/g' file
これはタブ文字の任意のペアの間に「0」を置きます。先読みは、それを消費せずに第2のタブと一致するので、次の一致で使用することができるので有用である。ここで
はawkを使用してそれを行うことができ方法です:
awk -F'\t' -v OFS='\t' '{ for (i = 1; i <= NF; ++i) sub(/^$/, 0, $i) } 1' file
は、これは0
別awk
$ awk -v RS='\t' -v ORS='\t' '$0==""{$0=0}1'
かで、すべての空のものに置き換えて、すべてのフィールドをループBEGINブロック付き
$ awk 'BEGIN{RS=ORS="\t"} $0==""{$0=0}1'
GNUで
これは、出力の末尾に終端改行を持たないタブだけを含む行を追加し、その結果をPOSIXテキストファイルではないようにします。 –
$ awk '{while(gsub(/\t\t/,"\t0\t"));} 1' file
a 0 0 0 0 0 0 b c
実際のデータには '^ |'が含まれていないので、実際にはタブ文字がありますか? –