我有一个文本文件,格式如下:
line 450
10876 -022.6421047 -070.1866390 000882 23362.47 99 000000.00 10 202246.0
10877 -022.6421090 -070.1866412 000882 23363.42 99 000000.00 10 202247.0
10878 -022.6421090 -070.1866412 000882 23363.93 99 000000.00 10 202248.0
10879 -022.6421090 -070.1866412 000882 23363.68 99 000000.00 10 202249.0
10880 -022.6421090 -070.1866412 000882 23363.72 99 000000.00 10 202250.0
line 460
10872 -022.6420829 -070.1866339 000882 23424.83 99 000000.00 10 202242.0
10873 -022.6420889 -070.1866373 000882 23413.99 99 000000.00 10 202243.0
10874 -022.6420945 -070.1866378 000882 23393.97 99 000000.00 10 202244.0
10875 -022.6421000 -070.1866369 000882 23375.70 99 000000.00 10 202245.0
我需要做的是删除空白行,并删除每行“XXX行”之间的每个数字块,连接XXX。然后,删除以“line”开头的每一行。为清楚起见,以下是所需输出文件的示例:
10876 -022.6421047 -070.1866390 000882 23362.47 99 000000.00 10 202246.0 450
10877 -022.6421090 -070.1866412 000882 23363.42 99 000000.00 10 202247.0 450
10878 -022.6421090 -070.1866412 000882 23363.93 99 000000.00 10 202248.0 450
10879 -022.6421090 -070.1866412 000882 23363.68 99 000000.00 10 202249.0 450
10880 -022.6421090 -070.1866412 000882 23363.72 99 000000.00 10 202250.0 450
10872 -022.6420829 -070.1866339 000882 23424.83 99 000000.00 10 202242.0 460
10873 -022.6420889 -070.1866373 000882 23413.99 99 000000.00 10 202243.0 460
10874 -022.6420945 -070.1866378 000882 23393.97 99 000000.00 10 202244.0 460
10875 -022.6421000 -070.1866369 000882 23375.70 99 000000.00 10 202245.0 460
答案 0 :(得分:3)
使用awk
(假设您的输入位于file.txt
且结果位于stdout上):
awk '
/^line/ {number = $2}
/^[0-9]/ {print $0, number}
' file.txt
答案 1 :(得分:3)
在Perl中你可以这样做:
perl -nle 'if(/^line/){($l = $_)=~s/\D//g;}elsif(/^\d/){print "$_ $l"}' file
答案 2 :(得分:1)
$ awk '$0 == "" {}
$1 == "line" {line = $2}
{print %0, line}' infile >outfile
答案 3 :(得分:1)
Sed可能不是这项工作的最佳工具,但
sed '/^$/d;/line/{s/line //;h;d;};G;s|\n||' filename
请注意,除了一个数字行之外的所有行都以空格结尾;这个解决方案假设这是一个错字,他们都应该。如果没有,请使用:
sed '/^$/d;/line/{s/line //;h;d;};G;s|\n| |' filename
如果某些人可能而某些人可能没有,那就安全地玩吧:
sed '/^$/d;/line/{s/line //;h;d;};G;s| *\n| |' filename
答案 4 :(得分:1)
awk '/line/{n=$2;next}NF{$0=$0 FS n;print $0}' file
ruby -ane 'n=$F[1] if /line/; print $_.chomp + " #{n}\n" if $F.size>0 && !/line/' file