我有几个普通格式的文本文件
0
0
0
0
125
0
0
0
0
0
0
3211
0
0
0
0
首先,我想确定file1.txt中哪些行包含非零元素
grep -ne '^[1-9]' file1.txt | cut -f 1 d:
然后,我想循环遍历file1.txt,file2.txt和file3.txt中的这些行号,并将找到的数字粘贴到具有该格式的新文件中。每个文本文件每行有一个数字,尽管偶尔行只有换行符
file1 file2 file3
125 a num a num
3211 a num a num
我会使用paste命令将每个结果附加到我的新文本文件中。但是,我不确定如何grep特定行号的内容。任何帮助将不胜感激
答案 0 :(得分:2)
<强>贝壳强>
$ paste -d " " f1 f2 f3 | grep -v "^0 "
1 101 201
3 103 203
11 111 211
<强>的Perl:强>
$ cat script.pl
open(my $f1, "<", "f1")||die $!;
open(my $f2, "<", "f2")||die $!; open(my $f3, "<", "f3")||die $!;
while (my $line1=<$f1>) {
chomp $line1;
my $line2 = <$f2>; chomp $line2; my $line3 = <$f3>; chomp $line3;
next if $line1 =~ /^0*$/;
print "$line1 $line2 $line3\n"
}
$ perl script.pl
1 101 201
3 103 203
11 111 211
数据:强>
$ cat f1
0
0
1
0
3
0
11
$ cat f2
0
0
101
0
103
0
111
$ cat f3
0
0
201
0
203
0
211
答案 1 :(得分:0)
您可能对此Perl版本感兴趣。
use strict;
use warnings;
use Tie::File;
my @rows;
my @i;
my @files = qw/ file1.txt file2.txt file3.txt /;
for my $file (@files) {
tie my @file, 'Tie::File', $file or die qq{Couldn't open file "$file": $!};
my @i = grep $file[$_], 0 .. $#file unless @i;
my @column = @file[@i];
push @{$rows[$_]}, $column[$_] for 0 .. $#column;
}
print join("\t", @files), "\n";
print join("\t", @{$rows[$_]}), "\n" for 0 .. $#rows;