次のテキストを含む2>&1 | tee ./ results.txt
ファイルに.txt
で端末の出力を保存しています。
executing: ./home/images/image-001-041.png
0,33, /results/image-001-041.png
1.7828,32, /results/image-001-040.png
1.86051,34, /results/image-001-042.png
1.90462,31, /results/image-001-039.png
1.90954,30, /results/image-001-038.png
1.91953,35, /results/image-001-043.png
1.92677,28, /results/image-001-036.png
1.92723,3160, /results/image-037-035.png
1.93353,7450, /results/image-086-035.png
1.93375,1600, /results/image-019-044.png
2番目の数値(最初のコンマ記号の後、つまり33,32,34、...)を取得し、Python
のリストに保存する必要があります。 bashコマンド、またはPythonの正規表現コマンドとは何ですか?ありがとう
cut
を使用:
cut -sd',' -f2 < result.txt
from man cut
:
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
-s, --only-delimited
do not print lines not containing delimiters
-f, --fields=LIST
select only these fields; also print any line that contains
no delimiter character, unless the -s option is specified
あなたはawkを使うことができます
awk -F ',' '{print $2}' results.txt
フィールド区切り記号としてコンマを定義し、2番目の列を印刷します。
sed
の例
$ sed -rn 's/[^,]+,([^,]+),.*/\1/p' results.txt
33
32
34
31
30
35
28
3160
7450
1600
-n
要求するまで何も出力しません(一致しない行を削除します)-r
EREを使用します(したがって、+
および(
)
メタキャラクターにバックスラッシュは必要ありません)[^,]+,
いくつかの非コンマとそれに続くコンマ([^,]+),
いくつかの非コンマの後にコンマを続けて保存します(この部分だけが必要です).*
任意の数の文字(残りの行を削除します)\1
保存したパターンp
変更した行を出力します(-n
で必要)Pythonについて言及しているため:
with open('results.txt') as results:
ids = [int(line.split(',')[1]) for line in results if ',' in line]
print(ids)
ids
として整数のリストを作成し、表示します:
[33, 32, 34, 31, 30, 35, 28, 3160, 7450, 1600]
投稿されたawkおよびsedソリューションに類似したPerlを使用できます。
-a
は、各行の自動分割を有効にします。
-F
は、各行を分割する区切り文字を指定するために使用されます。デフォルトは ''です。その後、結果は@Fに保存されます。したがって、$ F [1]は2番目の列を提供します。
-l
は、各行に改行が追加されるようにします。
-e
は、印刷される各行で実行する必要があるコマンドを指定するために使用されます
$ Perl -F, -ale 'print $F[1]' results.txt
33
32
34
31
30
35
28
3160
7450
1600
上記は以下のプログラムに展開されます:
$ Perl -MO=Deparse -F, -ale 'print $F[1]' results.txt
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = readline ARGV)) {
chomp $_;
our @F = split(/,/, $_, 0);
print $F[1];
}
-e syntax OK