다음과 같은 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 및 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