awk는 NR을 사용하여 반복 횟수를 출력합니다.

awk는 NR을 사용하여 반복 횟수를 출력합니다.

파일 목록을 반복하여 마지막 줄을 추출하고 열 8, 9, 10을 인쇄합니다. 또한 실제로 처리 중인 총 레코드 수(NR)인 "이벤트 번호"를 출력에 인쇄해야 합니다. 첫 번째 열의 이벤트/기록 번호를 아래와 같이 출력 파일로 인쇄하려면 어떻게 해야 합니까?

for i in `ls -d *mcp`; do
tail -1 "$i" | awk  '{ printf "%s %s %s\n", $8, $9, $10}' >> ${Pout}${output}
done
echo "Finished Looping through each file."

내가 원하는 출력은 다음과 같습니다.

1 45 60 5
2 30 67 3
3 40 12 4
.
.
.

'45 열은 $8, 60 열은 $9, 5 열은 $10를 나타냅니다. 1,2,3 등이 출력해야 할 것입니다. 본질적으로 줄 번호를 인쇄해야 합니다.

답변1

이 시도:

for i in ./*.mcp; do
    if [ -f "$i" ]; then
        tail -1 "$i"
    fi
done | awk '{ print NR, $8, $9, $10 }'

답변2

GNU awk(버전 4.x)를 사용하여 다음을 시도해 보십시오.

awk 'ENDFILE { printf "%d %s %s %s\n", ++c, $8, $9, $10}' *mcp > "${Pout}${output}"

echo "Finished Looping through each file."

다른 awks 및 쉘과 유사하게 다음을 시도하십시오 bash.

for f in *mcp
do
    awk -v c="$((++c))" 'END { printf "%d %s %s %s\n", c, $8, $9, $10}' "$f"
done > "${Pout}${output}"

echo "Finished Looping through each file."

관련 정보