データサンプリングの前後にゼロで割る

データサンプリングの前後にゼロで割る

複数のデータサンプルがあり、データサンプルの前後にゼロを削除する必要があります。ただし、明らかな理由から、データサンプル間にゼロを維持する必要があります。 awkまたはsedを使用してこれをどのように実行できますか?

ありがとうございます。

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
4.40
21.20
17.44
18.24
2.08
19.92
14.56
21.20
6.64
0
27.04
32.24
65.28
12.00
40.80
30.48
30.16
30.24
0
62.56
6.56
29.76
0
43.84
13.44
17.12
54.48
23.52
30.72
29.04
11.04
14.56
5.76
31.60
13.68
11.20
17.44
17.44
0
36.56
16.64
32.40
18.40
0
104
9.84
1.68
63.84
19.28
5.76
28.00
12.64
0
0
136
13.28
23.28
1.20
19.12
27.28
0
2.88
36.16
27.44
13.60
36.32
20.96
15.84
23.12
10.24
.96
43.60
8.32
0
0
61.60
20.00
31.36
32.80
0
72.32
27.04
9.52
21.28
2.08
44.48
11.20
26.40
19.92
18.40
0
78.32
13.04
38.88
6.24
66.64
4.56
25.12
43.20
4.00
58.08
18.40
2.48
20.32
15.76
24.96
0
28.40
28.64
32.72
6.64
14.72
0
0
0
0
0

ベストアンサー1

これにより、ファイルの先頭と末尾からすべてのゼロが削除され、途中でゼロが維持されます。

awk '/[^0]/{if (z)print substr(z,2);print;z="";f=1;next} f{z=z"\n"$0}' file

どのように動作しますか?

  • /[^0]/{if (z)print substr(z,2); print;z=""; f=1; next}

    現在行にゼロ以外の文字がある場合は、/[^0]/次のようにします。

    1. 変数がz空でない場合は、最初の文字をスキップして印刷します。

    2. 現在の行(ゼロ以外の行)を印刷します。

    3. z空の文字列にリセットします。

    4. fゼロ以外の線が表示されることを示すために、フラグを1に設定します。

    5. 残りのコマンドをスキップして再起動するようにジャンプしますnext

  • f{z=z"\n"$0}

    このコマンドに達すると、その行にゼロ以外の文字が含まれていないことを意味します。ゼロ以外の行が表示されている場合、つまり1の場合、改行と現在の行fに追加されます。z

実施例1

次の記事を検討してください。

$ cat file2
0
0
2.08
0
18.40
0
0

このコマンドは、次の出力を生成します。

$ awk '/[^0]/{if (z)print substr(z,2);print;z="";f=1;next} f{z=z"\n"$0}' file2
2.08
0
18.40

実施例2

入力ファイルの使用

$ awk '/[^0]/{if (z)print substr(z,2);print;z="";f=1;next} f{z=z"\n"$0}' file
4.40
21.20
17.44
18.24
2.08
19.92
14.56
21.20
6.64
0
27.04
32.24
65.28
12.00
40.80
30.48
30.16
30.24
0
62.56
6.56
29.76
0
43.84
13.44
17.12
54.48
23.52
30.72
29.04
11.04
14.56
5.76
31.60
13.68
11.20
17.44
17.44
0
36.56
16.64
32.40
18.40
0
104
9.84
1.68
63.84
19.28
5.76
28.00
12.64
0
0
136
13.28
23.28
1.20
19.12
27.28
0
2.88
36.16
27.44
13.60
36.32
20.96
15.84
23.12
10.24
.96
43.60
8.32
0
0
61.60
20.00
31.36
32.80
0
72.32
27.04
9.52
21.28
2.08
44.48
11.20
26.40
19.92
18.40
0
78.32
13.04
38.88
6.24
66.64
4.56
25.12
43.20
4.00
58.08
18.40
2.48
20.32
15.76
24.96
0
28.40
28.64
32.72
6.64
14.72

おすすめ記事