gpt4 book ai didi

linux - 在另一个文本文件中存在的文本之后打印特定行

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:52 24 4
gpt4 key购买 nike

我有两个文本文件。 Text-file-1 包含字符串(每行一个字符串);

C 010
C 020
C 024
.
.
.

Text-file-2 包含以下格式的数据;

C 005 Carbon
D Carbon 1
D Carbon 2
D Carbon 3
D Carbon 4
C 010 Hydrogen
D Hydrogen 1
D Hydrogen 2
C 017 Oxygen
D Oxygen 1
C 020 Nitrogen
D Nitrogen 1
D Nitrogen 2
D Nitrogen 3
C 024 Sulphur
D Sulphur 1
D Sulphur 2
.
.
.

Text-file-1 包含 30 行,但 Text-file-2 包含大量数据,并且格式与我提到的相同。我可以使用以下命令 grep 在 Text-file-1 中找到的 Text-file-2 中的文本;

awk 'NR==FNR { A[$2]=1; next }; A[$2]' Text-file-1 Text-file-2 > filename

此脚本的输出

C 010 Hydrogen
C 020 Nitrogen
C 024 Sulphur
.
.
.

我想要的输出是;

C 010 Hydrogen
D Hydrogen 1
D Hydrogen 2
C 020 Nitrogen
D Nitrogen 1
D Nitrogen 2
D Nitrogen 3
C 024 Sulphur
D Sulphur 1
D Sulphur 2
.
.
.

现在,我需要此命令的扩展,它可以打印所有行(以“D”开头),包括此行及其之后。 Text-file-2 中的所有行均以字母(C 或 D)开头。这封信对我来说没有什么用处,但我保留了它。请帮忙。

最佳答案

这应该可以帮助您入门。如果你是新手,你可能需要学习一些Perl,也许Beginner's Introduction to Perl是一个好的开始。还有官方Perl Programming Documentation 。祝编程愉快!

#!/usr/bin/perl
use strict;
use warnings;

open my $numbers, '<', \<<'EOF' or die $!;
010
020
024
EOF

open my $data, '<', \<<'EOF' or die $!;
C 005 Carbon
D Carbon 1
D Carbon 2
D Carbon 3
D Carbon 4
C 010 Hydrogen
D Hydrogen 1
D Hydrogen 2
C 017 Oxygen
D Oxygen 1
C 020 Nitrogen
D Nitrogen 1
D Nitrogen 2
D Nitrogen 3
C 024 Sulphur
D Sulphur 1
D Sulphur 2
EOF

my %want = map { chomp; $_ => 1 } <$numbers>;
my $number;
while (<$data>) {
$number = $1 if /\A C \s+ ([0-9]{3})/x;
print if $want{$number};
}

输出:

C   010 Hydrogen
D Hydrogen 1
D Hydrogen 2
C 020 Nitrogen
D Nitrogen 1
D Nitrogen 2
D Nitrogen 3
C 024 Sulphur
D Sulphur 1
D Sulphur 2

关于linux - 在另一个文本文件中存在的文本之后打印特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18803476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com