sed: 한 줄에서 두 줄 가져오기

sed: 한 줄에서 두 줄 가져오기

나는 파일 이름 목록을 id-datetime.txt한 줄에 하나씩 갖고 있는데, 여기서 ID는 항상 동일하고 날짜/시간은 순서대로 되어 있습니다.

첫 번째와 마지막 날짜 시간이 필요하므로 변수에 sed_script를 넣어서 $script얻을 수 있습니다.

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

알겠어요

datetime (oldest)
datetime (newest)

단일 파일 목록을 사용하는 것도 가능합니다.

이제 ID가 포함된 다른 행도 가져오려면 어떻게 해야 합니까?

id
datetime (oldest)
datetime (newest)

라인 1을 두 번 편집하여 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

첫 번째 행과 마지막 행에서 일부 데이터를 추출하시겠습니까? 각각에 대해 하나의 명령을 사용하여 처음에는 두 줄을 인쇄하십시오.

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'

관련 정보