![tsv 파일의 특정 셀 내용을 다른 셀의 편집된 내용으로 바꿉니다.](https://linux55.com/image/160951/tsv%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%EC%85%80%20%EB%82%B4%EC%9A%A9%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%EC%85%80%EC%9D%98%20%ED%8E%B8%EC%A7%91%EB%90%9C%20%EB%82%B4%EC%9A%A9%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
다음과 같은 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