我有一个像这样的 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
如果 field$2
是NULL
,则将 field$1
和分配"2"
给 field $2
。然后打印该行。
和sed
:
sed 's/^\([^[:blank:]]*\)\([[:blank:]]*\)NULL\([[:blank:]]*\)/\1\2\12\3/' file
分三组捕获第一列、后面的空格和第二列之后的(可能的)空格,并用第一组、二组、一 + “2” 和三组替换。
答案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