파일의 각 줄에서 다섯 번째 단어를 삭제하는 방법은 무엇입니까?

파일의 각 줄에서 다섯 번째 단어를 삭제하는 방법은 무엇입니까?

파일의 각 줄에서 다섯 번째 단어를 제거하고 싶습니다.

현재 파일 내용:

File is not updated or and will be removed  
System will shut down f within 10 seconds  
Please save your work 55 or copy to other location  
Kindly cooperate with us D  

예상 출력:

File is not updated and will be removed  
System will shut down within 10 seconds  
Please save your work or copy to other location  
Kindly cooperate with us

답변1

어때요 cut:

$ cut -d' ' -f1-4,6- file.txt 
File is not updated and will be removed  
System will shut down within 10 seconds  
Please save your work or copy to other location  
Kindly cooperate with us
  • -d' '구분 기호를 공백으로 설정

  • -f1-4,6-첫 번째부터 네 번째 필드(단어)를 선택하고 다섯 번째 필드를 유지한 후 여섯 번째 필드부터 나머지 필드까지 계속 인쇄합니다.

답변2

해결책 cut:

cut -d ' ' -f1-4 -f6- FILE

답변3

awk: 다섯 번째 필드 삭제

awk '{for (i=5; i<NF; i++) $i = $(i+1); NF--};1' file

파일을 제자리에 저장하려면 다음을 수행하십시오.https://stackoverflow.com/q/16529716/7552

5번째 필드의 내용을 제거하면 2개의 연속 출력 필드 구분 기호가 남게 됩니다.

awk '{$5 = ""};1' file

답변4

글렌동등한 솔루션을 제공합니다

awk '{$5="";인쇄}'문서

그와 다른 사람들이 지적했듯이, 이것은

  1. 각 줄의 선행 및 후행 공백을 제거하고,
  2. 각 공백 문자열(공백 및/또는 탭)을 단일 공백으로 압축합니다.
  3. 네 번째 단어와 여섯 번째 단어 사이에는 두 개의 공백을 두십시오.

세 번째 문제를 해결하는 비결은

awk '{$5="";인쇄}'문서| sed의 // /'

이렇게 해도 5개 이하의 단어가 포함된 줄 끝에는 하나 이상의 추가 공백이 남게 됩니다. 입력에 전혀 나타나지 않는 단어를 식별할 수 있는 경우,

awk '{$5="유니콘";인쇄}'문서| sed 's/ *유니콘//'

그럼에도 불구하고(그러나 여전히 질문 1과 2를 남겨둡니다).

관련 정보