다음 정보 테이블이 있습니다.
ko:K00624
ko:K20215
1.5.3.5
ko:K01106
2.3.41.5
나는 다음과 같은 출력을 원합니다 :
ko:K00624
ko:K20215
-
ko:K01106
-
다음 명령을 사용했지만 작동하지 않습니다. 저를 추천해주세요
cat filename | awk '{if($1!~"ko"); print "-") print }' | less
답변1
가능한 수정된 명령 버전 awk
:
awk '{if($1!~"ko") print "-"; else print }' filename
그렇게 하는 것이 더 현지어일 수도 있지만
awk '$0 !~ /^ko/ {$0 = "-"} {print}' filename
또는 (약식)
awk '!/^ko/ {$0 = "-"} 1' filename
또 다른 GNU sed
대안( c
명령 대신 s
명령 사용):
sed '/^ko/!c-' filename
답변2
sed -e '/^ko/!s/.*/-/' input_file.dat
즉, "ko"로 시작하지 않는 모든 줄에 대해 전체 줄을 대시로 바꾸면 됩니다. 그 외의 사항은 그대로 두고 그대로 인쇄하시기 바랍니다.
답변3
또는....
~]$ echo -e "ko:K00624\nko:K20215\n 1.5.3.5\nko:K01106\n2.3.41.5" \
| while read line ; do if [[ $line =~ ko ]] ; then echo $line ; else echo "-" ; fi ; done
ko:K00624
ko:K20215
-
ko:K01106
-
답변4
내 sed
대답은 다음과 같습니다. FWIW
sed s/^[^ko].*/-/g filename
로 시작하지 않는 모든 ko
줄을 바꾸면 됩니다 -
. (댓글로 추가하고 싶었는데 아직 담당자가 없습니다.)