将 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

如果 field$2NULL,则将 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

基于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

相关内容