空の列に文字列を挿入する

空の列に文字列を挿入する

空の列にテキストを挿入しようとしています。ファイルはタブで区切られ、空の列にテキストを挿入しようとしています。例えば

Column1  Column2  Column3
string1  decs1    1234
         desc1    1255
string3           3443
string4  desc1    1
string5           435

空の列1または2にNULLというテキストのみを挿入しようとしています。だからこんな感じです。 (2列が空の場合、1列と3列の間にダブルタップがあります。)

column1  column2  column3
string1  decs1    1234
null     desc1    1255
string3  null     3443
string4  desc1    1
string5  null     435

試してみましたがawk、テストではすべての列2にNULLテキストを挿入しますが、空の項目がある場合は3番目の列を列2に切り捨てます。

awk '{sub("$", "NULL", $2)}; 1' file.txt > file2.txt

結果はこれです

column1  column2 column3
string1  desc1NULL 1234
string2  desc1NULL 1255
string3  3443NULL
string4  descNULL  1
string4  435NULL

明らかに間違った構文を使用していますが、修正する方法がわかりません。

ありがとう

ベストアンサー1

私はこれを行うことをお勧めしますsed

sed -E -e :1 -e 's/(^|\t)(\t|$)/\1null\2/;t1' yourfile

(移植性のために実際のTAB文字を代わりに使用してください\t。ただし、ブラウザのコピー/貼り付け以降は保持されないことがあります。)

空のフィールドを検出する方法は?どちらか

  • ^\t行の先頭のタブ文字()または
  • \t\t2つのタブ()の間には何もありません。または
  • \t$行の末尾にタブ文字()があります。

これらすべての場合で、s2 つの一致の間のパターンを置き換えます。

2つの空のフィールドが順番にある場合はループを実行する必要があるため、何かが置き換えられたらマーカーにt1ジャンプします。:1

おすすめ記事