0

これが私の質問です:

/path/newdir/newtext.csv 

newtext.csvは次のようになります:

レコード1

1行目2行目サンプル番号:123456789(3行目)| | | | | タイムイン:2012-05-29T10:21:06Z(21行目)| | | タイムアウト:2012-05-29T13:07:46Z(行番号30)

レコード2

1行目2行目サンプル番号:363214563(3行目)| | | | | タイムイン:2012-05-29T10:21:06Z(21行目)| | | タイムアウト:2012-05-29T13:07:46Z(行番号30)

レコード3

1行目2行目サンプル番号:987654321(3行目)| | | | | タイムイン:2012-05-29T10:21:06Z(21行目)| | | タイムアウト:2012-05-29T13:07:46Z(行番号30)

newtext.csvにそのような100個のレコードがあると仮定します。したがって、入力したi/p文字列のパラメーターが必要になります。これは以下のとおりです。

入力検索文字列の例:

123456789

出力例:

Sample Number: 123456789
Time In: 2012-05-29T10:21:06Z
Time Out: 2012-05-29T13:07:46Z

これはまさに私が必要としているものです。手伝ってくれませんか ?

4

1 に答える 1

0

Perlこのタスクにより適しているはずです。

    $ cat newtext.csv 
    line 1 line 2 Sample Number: 123456789 (line no. 3) | | | | | Time In: 2012-05-29T10:21:06Z (line no. 21) | | | Time Out: 2012-05-29T13:07:46Z (line no. 30)
    line 1 line 2 Sample Number: 363214563 (line no. 3) | | | | | Time In: 2012-05-29T10:21:06Z (line no. 21) | | | Time Out: 2012-05-29T13:07:46Z (line no. 30)
    line 1 line 2 Sample Number: 987654321 (line no. 3) | | | | | Time In: 2012-05-29T10:21:06Z (line no. 21) | | | Time Out: 2012-05-29T13:07:46Z (line no. 30)

フィールドの数に関係なく、正規表現を作成するだけで、ワンライナーを使用して期待される結果を得ることができます。

# perl -lane '/(Sample Number:\s*\d+).*(Time In:\s*\S+).*(Time Out:\s*\S+)/;print $1."\n".$2."\n".$3' newtext.csv
Sample Number: 123456789
Time In: 2012-05-29T10:21:06Z
Time Out: 2012-05-29T13:07:46Z
Sample Number: 363214563
Time In: 2012-05-29T10:21:06Z
Time Out: 2012-05-29T13:07:46Z
Sample Number: 987654321
Time In: 2012-05-29T10:21:06Z
Time Out: 2012-05-29T13:07:46Z
于 2012-06-04T07:22:26.683 に答える