Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 从文件中筛选具有给定前缀的特定行_Linux_Bash_Sed - Fatal编程技术网

Linux 从文件中筛选具有给定前缀的特定行

Linux 从文件中筛选具有给定前缀的特定行,linux,bash,sed,Linux,Bash,Sed,我需要在整个文件中给定前缀的最后一行之前获取该行,我可以使用哪个命令(sed或任何其他选项)来获取该行 例如:(前缀是每行的前两个数字:例如,(16316)(0312),等等) file.txt: 16 316 32 163160 0 312 9997 0 3120 0 31221309 0 3120 0 313 10108 03130 0 313 32732 03130 03149277 0 314 0 0 314 19781 0 314 0 0 315 7 03150 0 315 9380

我需要在整个文件中给定前缀的最后一行之前获取该行,我可以使用哪个命令(sed或任何其他选项)来获取该行

例如:(前缀是每行的前两个数字:例如,(16316)(0312),等等)

file.txt:

16 316 32

163160

0 312 9997

0 3120

0 31221309

0 3120

0 313 10108

03130

0 313 32732

03130

03149277

0 314 0

0 314 19781

0 314 0

0 315 7

03150

0 315 9380

03150

0 315 30388

03150

输出应为:

16 316 32

0 31221309

0 313 32732

0 314 19781

0 315 30388


谢谢

我假设这些空行实际上不在您的文件中

tac file.txt | awk '$1 " " $2 != prefix {getline; print; prefix = $1 " " $2}' | tac

反转文件。当我看到一个新前缀时,打印下一行。然后反转输出。

我假设这些空行实际上不在您的文件中

tac file.txt | awk '$1 " " $2 != prefix {getline; print; prefix = $1 " " $2}' | tac

反转文件。当我看到一个新前缀时,打印下一行。然后反转输出。

我假设这些空行实际上不在您的文件中

tac file.txt | awk '$1 " " $2 != prefix {getline; print; prefix = $1 " " $2}' | tac

反转文件。当我看到一个新前缀时,打印下一行。然后反转输出。

我假设这些空行实际上不在您的文件中

tac file.txt | awk '$1 " " $2 != prefix {getline; print; prefix = $1 " " $2}' | tac

反转文件。当我看到一个新前缀时,打印下一行。然后反转输出。

awk
应能工作:

awk '$3>0{a[$1,$2]=$0} END{for (i in a) print a[i]}' file
16 316 32
0 312 21309
0 313 32732
0 314 19781
0 315 30388

这个
awk
应该可以工作:

awk '$3>0{a[$1,$2]=$0} END{for (i in a) print a[i]}' file
16 316 32
0 312 21309
0 313 32732
0 314 19781
0 315 30388

这个
awk
应该可以工作:

awk '$3>0{a[$1,$2]=$0} END{for (i in a) print a[i]}' file
16 316 32
0 312 21309
0 313 32732
0 314 19781
0 315 30388

这个
awk
应该可以工作:

awk '$3>0{a[$1,$2]=$0} END{for (i in a) print a[i]}' file
16 316 32
0 312 21309
0 313 32732
0 314 19781
0 315 30388

你能澄清这个过滤器的逻辑吗?对于每个前缀,它类似于
:选择最后一个
之前的行。你能澄清这个过滤器的逻辑吗?对于每个前缀,它类似于
:选择最后一个
之前的行。你能澄清这个过滤器的逻辑吗?对于每个前缀,它类似于
:选择最后一行之前的那一行
你能澄清一下这个过滤器的逻辑吗?对于每个前缀,它有点像
:选择最后一行之前的那一行
我只是好奇我们是否真的需要
tac
这里他要的是前一行
tac
让我们打印下一行我只是好奇我们是否真的需要
tac
这里他要的是上一行
tac
让我们打印下一行我只是好奇我们是否真的需要
tac
这里他要的是上一行
tac
让我们打印下一行我只是好奇我们是否真的需要
tac
这里他要的是上一行
tac
让我们打印出下一行