我怎么能把这些行放在范围格式中?

时间:2017-08-18 14:56:35

标签: bash awk sed

我有一个包含826,838行的文本文件。 Text file looks like this(抱歉,无法让图片上传器工作)。

我正在使用sed(sed -n'2p; $ p')打印第二行和最后一行,但无法弄清楚如何将行放入范围格式。

当前输出:

     1    3008.00   7380.00  497724.00  3158482.00  497724.00   3158482.00
826838    4744.00   7409.00  480729.00  3207718.00  480729.00   3207718.00

期望的输出:

1-826838  3008.00-4744.00  7380.00-7409.00  497724.00-480729.00  3158482.00-3207718.00  497724.00-480729.00  3158482.00-3207718.00

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

这可能适合你(GNU sed):

sed -r '2H;$!d;H;x;:a;s/\n\s*(\S+)\s*(.*\n)\s*(\S+\s*)/\1-\3\n\2/;ta;P;d' file

将第2行和最后一行存储在保留空间(HS)中。在最后一行之后,交换到HS,然后重复地将第二行和第三行的第一个字段移动到第一行。最后只打印第一行。

答案 1 :(得分:1)

使用单个 awk 表达式(将获得所需的行并生成所需的范围):

awk 'NR==2{ split($0,a) }END{ for(i=1;i<=NF;i++) printf("%s\t",a[i]"-"$i); print "" }' file

输出:

1-826838    3008.00-4744.00 7380.00-7409.00 497724.00-480729.00 3158482.00-3207718.00   497724.00-480729.00 3158482.00-3207718.00