2016-10-14 7 views
-1

(タブを意味)で区切られたa^I^I^I^I^I^I^Ib^Icのような行を持つデータファイルがあります。タブで区切られたファイルの空のフィールドを "0"に置き換えてください

ここで、各列の空の値を0に変更したいので、結果はa^I0^I0^I0^I0^I0^I0^Ib^Icのようになります。

1つのsedコマンドでどのように達成できますか?

+0

実際のデータには '^ |'が含まれていないので、実際にはタブ文字がありますか? –

答えて

0

これは先読みをサポートするツールを使用して行うことが容易である:

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

0

awk

$ awk -v RS='\t' -v ORS='\t' '$0==""{$0=0}1' 

かで、すべての空のものに置き換えて、すべてのフィールドをループBEGINブロック付き

$ awk 'BEGIN{RS=ORS="\t"} $0==""{$0=0}1' 
GNUで
+0

これは、出力の末尾に終端改行を持たないタブだけを含む行を追加し、その結果をPOSIXテキストファイルではないようにします。 –

0

はsedを:

sed ':a;s/\t\(\t\|$\)/\t0\1/;ta' file 

\tまたは\t0と行の末尾に続くすべての\tを交換してください。

+1

@エドモートンありがとう、私は編集しました。 – SLePort

+1

@エドモトン私はそれを手に入れます。私は 't'コマンドを追加しました。 – SLePort

0
$ awk '{while(gsub(/\t\t/,"\t0\t"));} 1' file 
a  0  0  0  0  0  0  b  c 
関連する問題