tsvファイルの特定のセルの内容を別のセルの編集内容に置き換えます。

tsvファイルの特定のセルの内容を別のセルの編集内容に置き換えます。

次のtsvファイルがあります。

col1            col2           
etc              ok             
something        NULL                
category1        ok           
randomtext       NULL    

「NULL」を左のセルの内容と数字2に置き換える必要があります。次のようになります。セルの内容が文字列 "NULL"と一致する場合は、それを左側のセルの内容に置き換えて数字2を追加します。

col1            col2      
etc              ok             
something        something2                
category1        ok           
randomtext       randomtext2  

ありがとう

答え1

そしてawk

awk 'BEGIN{ OFS="\t" } { if ($2=="NULL"){ $2=$1"2" } print }' file

フィールド$2の場合、NULLフィールドとフィールドはフィールドに$1割り当てられます。その後、ラインを印刷します。"2"$2

そしてsed

sed 's/^\([^[:blank:]]*\)\([[:blank:]]*\)NULL\([[:blank:]]*\)/\1\2\12\3/' file

3 つのグループの最初の列、次の空白、および 2 番目の列の後の (可能な) 空白をキャプチャし、最初のグループ、2 番目のグループ、 one+"2"、3 番目のグループに置き換えます。

答え2

ミラーの使用(https://github.com/johnkerl/miller) はい

mlr --tsv put -S 'if ($col2 == "NULL") {$col2 = $col1."2"}' input.tsv

答え3

csvsqlPythonベースcsvkit

csvsql -t --query '
  SELECT col1, CASE WHEN col2 IS NULL THEN col1||"2" ELSE col2 END AS col2 FROM stdin
' < file.tsv | csvformat -T
col1    col2
etc ok
something   something2
category1   ok
randomtext  randomtext2

答え4

GNU sedを使用するのは簡単です:

$ sed -E 's/^([^\t]+)\tNULL(\t|$)/\1\t\12\2/' file

関連情報