Jaz*_*Flo 16 unix linux bash sed
我有一个大约50,000行的文件,我需要检索特定的行.我尝试了以下命令:
sed -n 'Np;Np;Np' inputFile.txt > outputFile.txt
Run Code Online (Sandbox Code Playgroud)
('N'是特定的行,我想提取)
这工作正常,但命令提取ORDER中的行(即它重新订购我的输入)ex.如果我尝试:
sed -n '200p;33p;40,000p' inputFile.txt > outputFile.txt
Run Code Online (Sandbox Code Playgroud)
我得到一个文本文件,其行的顺序为:33,200,40,000(这对我的目的不起作用).有没有办法维持命令行中出现的顺序?
gle*_*man 13
你必须坚持到第33行,直到你看到第200行:
sed -n '33h; 200{p; g; p}; 40000p' file
Run Code Online (Sandbox Code Playgroud)
有关详细说明,请参阅手册:https://www.gnu.org/software/sed/manual/html_node/Other-Commands.html
awk 可能更具可读性:
awk '
NR == 33 {line33 = $0}
NR == 200 {print; print line33}
NR == 40000 {print}
' file
Run Code Online (Sandbox Code Playgroud)
如果要按特定顺序打印任意数量的行,可以概括为:
awk -v line_order="11 3 5 1" '
BEGIN {
n = split(line_order, inorder)
for (i=1; i<=n; i++) linenums[inorder[i]]
}
NR in linenums {cache[NR]=$0}
END {for (i=1; i<=n; i++) print cache[inorder[i]]}
' file
Run Code Online (Sandbox Code Playgroud)
您还可以使用其他 bash 命令吗?在这种情况下,这有效:
for i in 200 33 40000; do
sed -n "${i}p" inputFile.txt
done > outputFile.txt
Run Code Online (Sandbox Code Playgroud)
这可能比在 sed 中使用数组慢,但更实用。