알 수 없는 크기의 전체 파일을 반복하고 지정된 열에서 지정된 단어(매개변수 1로 전달됨)가 발생하는 모든 행을 제거해야 합니다. 또한 삭제된 행 수를 추적해야 합니다. 나는 이것이 awk의 일이라고 가정하고 있지만 많은 어려움을 겪고 있습니다. awk match를 사용해 보았지만 다른 구문 문제 외에 인수를 단어로 변환할 수 없습니다.
예(file.txt):
Katie 1234 4567 blue
Ben 3456 2345 purple
Alex 7896 6789 blue
$ script.sh blue 4
파일을 다음과 같이 편집합니다.
Ben 3456 2345 purple
그리고 출력:2 lines removed
나는 단지 코드를 얻는 것보다 내가 하고 있는 일을 이해하는 데 더 관심이 있습니다.
답변1
#!/bin/sh
awk -v value="$1" -v column="$2" '
$column == value {++removed; next}
1 {print}
END {print removed " lines removed" >"/dev/stderr"}
' <File.txt >File.txt.tmp &&
mv File.txt.tmp File.txt
설명하다:
-v value="$1"
awk 변수를value
쉘 스크립트의 첫 번째 매개변수로 설정하십시오.- 각 라인에 대해 조건이
$column == value
true이면 중괄호 안의 코드가 실행됩니다.$column
열 번호의 내용입니다column
(1부터 시작).++removed
삭제된 행의 카운터를 증가시킵니다. 변수는 0부터 시작합니다.next
print
조건이 true인 경우 명령이 실행되지 않도록 다음 입력 라인으로 점프합니다 .
1 {print}
next
명령 실행을 유발하지 않은 각 행을 인쇄합니다 . (1
항상 참인 조건입니다.)END {…}
입력 끝 부분에 중괄호로 묶인 코드를 실행합니다.- awk 코드는 임시 파일에 쓴 다음 해당 위치로 이동합니다.