我有一个文件名列表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'