[file] 파일에서 줄의 마지막 열 인쇄

지속적으로 쓰거나 업데이트되는 파일이 있습니다. 특정 단어가 포함 된 마지막 줄을 찾은 다음 해당 줄의 마지막 열을 인쇄하고 싶습니다.

파일은 다음과 같습니다. 시간이 지남에 따라 더 많은 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

$