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 $2이면 NULLfield 및 field 가 field 에 $1할당됩니다 . 그런 다음 라인을 인쇄하십시오."2"$2

그리고 sed:

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

세 그룹의 첫 번째 열, 다음 공백 및 두 번째 열 뒤의 (가능한) 공백을 캡처하여 첫 번째 그룹, 두 번째 그룹, one + "2" 및 세 번째 그룹으로 대체합니다.

답변2

밀러 사용(https://github.com/johnkerl/miller) 예

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

답변3

csvsql파이썬 기반 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

관련 정보