他のファイルから読みたい行のリストを含むファイルがあります。この行を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 -E '
while(<>){
chomp;
if($file2) { say if exists $lines{$.} }
else { $lines{$_}++ }
} continue { if (eof){$.=0; $file2++} }'\
file_with_line_numbers other_file
答え4
sed -n $(xargs printf "%sp;" < input.txt) data
-n
言うsed
明示的に指示しない限り、行を印刷しないでください。xargs
標準入力の行を引数としてコマンドを実行します。printf
各パラメータは、説明したようにフォーマットされます。上記は$(...)
次のように拡張されます(例ファイルの場合)。
2088p;2089p;2095p;2096p;
sed
これは、2088、2089、2095、および2096行を印刷するように指示する一連のコマンドです。
これにより、複数回読み込んxargs -i sed "{}q"
だりパイプしたりするのではなく、各ファイルを一度読み込みます。head
tail