我有一个文件,其中包含我想从另一个文件读取的行列表。我想将这些行输出到一个实用程序 ( grep
),它可以让我读取整行并从中提取信息。包含这些行的文件如下所示:
cat input.txt
2088
2089
2095
2096
由于某种原因,我被困在这个问题上。我知道sed
可以将特定的行号作为参数,但我不知道如何将其放入变量中以提供给它。
答案1
awk 'NR==FNR{linesToPrint[$0];next}
FNR in linesToPrint' line-numbers.txt file.txt
答案2
如果我正确理解你的问题,这样的事情应该有效:
for i in $(cat numbers.txt); do cat lines.txt|tail -n +$i|head -n 1; done
对于文件“numbers.txt”中的每个数字,它提取另一个文件的相应行并打印它。
和 是一样的sed
,xargs
看起来像这样:
xargs -i sed "{}q;d" lines.txt <numbers.txt
答案3
假设米查斯的解读是正确的,解决方案如下awk
:
awk 'FNR==NR{a[i++]=$0} # Process the first file
FNR!=NR{ # Process the second file
for (i in a){
if(FNR==a[i]){
print $0
}
}
}' file_with_line_numbers other_file
在 Perl 中:
perl -E '
while(<>){
chomp;
if($file2) { say if exists $lines{$.} }
else { $lines{$_}++ }
} continue { if (eof){$.=0; $file2++} }'\
file_with_line_numbers other_file