空の列にテキストを挿入しようとしています。ファイルはタブで区切られ、空の列にテキストを挿入しようとしています。例えば
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\t
2つのタブ()の間には何もありません。または\t$
行の末尾にタブ文字()があります。
これらすべての場合で、s
2 つの一致の間のパターンを置き換えます。
2つの空のフィールドが順番にある場合はループを実行する必要があるため、何かが置き換えられたらマーカーにt1
ジャンプします。:1