次の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
csvsql
Pythonベース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