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
最初の 3 つの数値と累乗単位を次のように印刷できます。
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