sed:1行から2行を取得する

sed:1行から2行を取得する

私はファイル名のリストを1id-datetime.txt行に1つずつ持っています。IDは常に同じで、日付/時刻は順番になっています。

最初と最後の日時が必要なので、変数にsed_scriptを入れて$script取得できます。

sed -nr "1 $script p; \$ $script'

わかりました。

datetime (oldest)
datetime (newest)

単一のファイルリストを使用することも可能です。

これで、IDを含む他の行も取得するにはどうすればよいですか?

id
datetime (oldest)
datetime (newest)

1行目を2回編集して2つの別々の行を提供する(簡単な)方法はありますか?

答え1

わかりました。

1 {
    #hold the line
    h
    #extract id
    s|^([0-9]{6}).*|\1|; p
    #put line back again
    g
    #get datetime
    $sed_str
}

sedスクリプトのこの部分は、最初の行を2回印刷(および編集)します。

答え2

最初の行と最後の行からいくつかのデータを抽出しますか?それぞれに1つのコマンドを使用して、最初は2行を印刷します。

sed -n -e '1s/^\(.*\)-\(.*\)\.txt$/\1\
\2/p' -e '$s/^\(.*\)-\(.*\)\.txt$/\2/p'

awkがより冗長であれば、より明確になるかもしれません。

awk -F- '{gsub(/\.[^.]*$/,"");
          dt=$2}
         NR==1 {print $1; print $2}
         END {print dt}'

またはパール。

perl -l -ne 's/\.[^.]*$//;
             /^(.*)-(.*)$/ or next;
             print $1 if $.==1;
             print $2 if $.==1 || eof'

関連情報