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。

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

相关内容