지속적으로 쓰거나 업데이트되는 파일이 있습니다. 특정 단어가 포함 된 마지막 줄을 찾은 다음 해당 줄의 마지막 열을 인쇄하고 싶습니다.
파일은 다음과 같습니다. 시간이 지남에 따라 더 많은 A1 / B1 / C1 라인이 추가됩니다.
A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434
나는 사용하려고
tail -f file | grep A1 | awk '{print $NF}'
값 766을 인쇄하지만 아무것도 출력되지 않습니다.
이것을 할 수있는 방법이 있습니까?
답변
버퍼링으로 인해 아무것도 보이지 않습니다. 충분한 행이 있거나 파일 끝에 도달하면 출력이 표시됩니다. tail -f
는 더 많은 입력을 기다리는 것을 의미하지만 더 이상 라인이 없으므로 file
파이프 grep
가 닫히지 않습니다.
출력 -f
에서 생략하면 tail
즉시 표시됩니다.
tail file | grep A1 | awk '{print $NF}'
@EdMorton은 물론입니다. Awk 도 검색 할 수 A1
있어 명령 줄이 단축됩니다.
tail file | awk '/A1/ {print $NF}'
또는 꼬리없이, 포함하는 모든 줄의 마지막 열을 보여줍니다. A1
awk '/A1/ {print $NF}' file
@MitchellTracy의 의견 덕분에 tail
포함 된 레코드가 누락 A1
되어 결과가 전혀 출력되지 않을 수 있습니다. 이는 파일을 먼저 검색 한 다음 마지막 줄만 표시하여 전환 tail
하여 해결할 수 있습니다 awk
.
awk '/A1/ {print $NF}' file | tail -n1
답변
줄의 마지막 열을 인쇄하려면 $ (NF)를 사용하십시오.
awk '{print $(NF)}'
답변
한 가지 방법으로 awk
:
tail -f file.txt | awk '/A1/ { print $NF }'
답변
약간의 파이프만으로도이 작업을 수행 할 수 있습니다.
tac file | grep -m1 A1 | rev | cut -d' ' -f1 | rev
답변
어쩌면 이것이 효과가 있습니까?
grep A1 file | tail -1 | awk '{print $NF}'
답변
당신은 모든 것을 할 수 있습니다 awk
:
<file awk '$1 ~ /A1/ {m=$NF} END {print m}'
답변
펄 사용하기
$ cat rayne.txt
A1 123 456
B1 234 567
C1 345 678
A1 098 766
B1 987 6545
C1 876 5434
$ perl -lane ' /A1/ and $x=$F[2] ; END { print "$x" } ' rayne.txt
766
$