sed 명령을 최적화하거나 새 명령을 생성하세요

sed 명령을 최적화하거나 새 명령을 생성하세요

매우 큰 로그 파일을 필터링하려고 하는데 내 명령에 대한 대안이 있는지 궁금합니다. 아니면 일부 최적화? 코드는 다음과 같습니다.

#!/bin/bash
nice -20 sed '/./{H;$!d;};x;/37455299339/!d' 1.txt > /tmp/new.txt
nice -20 sed -n '/Acct-Status-Type/,/NAS-Identifier/p' /tmp/new.txt > /tmp/new_1.txt
rm /tmp/new.txt
nice -20 sed '/Acct-Status-Type/{x;p;x;}' /tmp/new_1.txt > /tmp/new_2.txt
rm /tmp/new_1.txt
nice -20 less /tmp/new_2.txt | grep -A1 -B1 37455299339 | grep -A1 -B1 User-Name > new_3.txt

답변1

첫 번째 단계로 모든 임시 파일을 삭제하고 대신 파이프를 사용하겠습니다. 첫 번째 파일부터 시작하여 sedstdout을 두 번째 파일로 파이프한 다음 세 번째 파일로 파이프합니다. 그렇다면 귀하의 less명령은 쓸모가 없습니다. 세 번째 명령에서 다시 파이프 sed하십시오 grep.

파이프를 사용하면 많은 이점이 있습니다. 첫째, 디스크 공간을 낭비하지 않으며, 둘째, 모든 디스크 I/O를 기다리지 않아도 됩니다.

해결책을 더 잘 찾으려면 현재 무엇이 당신을 막고 있는지 알려주어야 합니다. 명령 중 하나입니까 sed? 어느 것?

관련 정보