파일이 여러 개 있는데 각 파일에는 세 개의 열이 포함되어 있습니다. 주어진 열 항목의 부호가 처음으로 변경되는 시점(즉, 음수에서 양수로)을 모니터링하여 이것이 처음 발생하는 행을 다른 파일에 저장할 수 있도록 하고 싶습니다. 아래 예에서는 첫 번째 열의 기호 변경 사항을 모니터링하고 싶습니다.
-1 2 4 -4 3 5 -2 4 6 1 2 4 2 4 5 2 3 4 -4 5 6 -3 4 6
이 코드는 줄을 저장해야 합니다-2 4 6다른 파일로.
답변1
변화가 있다면언제나음수에서 음수가 아닌 양수 까지 작동합니다. 이전 줄을 인쇄하고 필드 1에 음수가 아닌 값이 표시되면 종료됩니다( $1
다른 필드를 보려면 숫자를 변경하세요).
$ awk '$1 >= 0 { print prev; exit; } { prev = $0; }' < inputfile
-2 4 6
어느 쪽이든 변경할 수 있는 경우 이전 줄에 기호를 저장하고 이를 비교해야 합니다(여기서는 필드 번호가 필요한 두 곳이 있으므로 자유롭게 설정된 변수에서 가져옵니다 -vfield=1
).
$ awk -vfield=1 'function sign(x) { if (x < 0) return -1; return +1; }
NR != 1 && sign($field) != prevsign { print prevline; exit; }
{ prevline = $0; prevsign = sign($field) }' < inputfile
두 경우 모두 물론 > outputfile
출력을 다른 파일로 리디렉션하는 방법을 사용할 수 있습니다.