파일의 각 줄에서 다섯 번째 단어를 제거하고 싶습니다.
현재 파일 내용:
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="";인쇄}'문서
그와 다른 사람들이 지적했듯이, 이것은
- 각 줄의 선행 및 후행 공백을 제거하고,
- 각 공백 문자열(공백 및/또는 탭)을 단일 공백으로 압축합니다.
- 네 번째 단어와 여섯 번째 단어 사이에는 두 개의 공백을 두십시오.
세 번째 문제를 해결하는 비결은
awk '{$5="";인쇄}'문서| sed의 // /'
이렇게 해도 5개 이하의 단어가 포함된 줄 끝에는 하나 이상의 추가 공백이 남게 됩니다. 입력에 전혀 나타나지 않는 단어를 식별할 수 있는 경우,
awk '{$5="유니콘";인쇄}'문서| sed 's/ *유니콘//'
그럼에도 불구하고(그러나 여전히 질문 1과 2를 남겨둡니다).