results.txt
이러한 줄로 명명된 파일에서 더미 정보를 제거하는 방법은 무엇입니까 ?
파일 내의 행은 다음과 같습니다.
_my0001_split00000000.txt:Total Dynamic Power = 0.0000 mW
_my0001_split00000050.txt:Total Dynamic Power = 117.5261 uW (100%)
...다음과 같이 탭으로 구분된 형식으로 변경해야 합니다.
0001 00000000 0.0000 mW
0001 00000050 117.5261 uW
답변1
대신 사용하는 sed
것은 어떻습니까 awk
?
sed -r 's/^_my([0-9]+)_split([0-9]+)\.txt:[^=]*=\s*([0-9.]+) *(\S+).*/\1\t\2\t\3 \4/' /path/to/file
답변2
GNU가 있다면 awk
실제로 고정 필드 너비를 지정할 수 있습니다.
gawk -vFIELDWIDTHS="3 4 6 8 30 8 1 3" -vOFS="\t" '{print $2,$4,$6,$8}' results.txt
0001 00000000 0.0000 mW
0001 00000050 117.5261 uW
그러나 정규식 기반 솔루션을 고려할 수도 있습니다. 예를 들어 perl
처음 세 개의 숫자 값과 거듭제곱 단위를 다음과 같이 인쇄할 수 있습니다.
perl -lne 'print join "\t", (/\d*\.?\d+|\b.W\b/g)[0..3]' results.txt
0001 00000000 0.0000 mW
0001 00000050 117.5261 uW
답변3
너할 수 있는예를 들면 다음과 같습니다 awk
.
$ awk -vOFS="\t" '{
sub(/.txt:.*= */," ");
sub(/^.../,"",$1);
sub(/_split/, "\t",$1);
print $1,$2,$3
}' file
0001 00000000 0.0000 mW
0001 00000050 117.5261 uW
그러나 실제로는 작업에 가장 적합한 도구는 아닙니다. awk는 변경 없이 필드를 추출하려는 경우 훌륭하게 작동하지만, 편집해야 할 경우 번거로울 수 있습니다.
나는 다음과 같은 것을 사용할 것입니다 :
$ perl -lne '
@m=(/\D+(\d+)\D+(\d+).*=\s*([0-9.]+)\s+(\S+).*$/);
print join "\t", @m' file
0001 00000000 0.0000 mW
0001 00000050 117.5261 uW
답변4
sed 's/_my//;s/_split/\i/;s/\.txt:Total Dynamic Power *= */\i/' /path/to/input