我想获取一个代表源文件行号的数字列表,我要过滤并从源文件中过滤那些行。我如何构建unix管道以从源文件中提取这些行?
管道可能看起来像:
cat sourcefile.tsv | some-filter linenumbers.txt > extractedrecords.tsv
我想不出一个UNIX工具的组合来做到这一点。后备方法是编写一个bash脚本,该脚本sed -n [number]p sourcefile.tsv
针对linenumbers.txt中的每个数字执行操作。
如果我的后备计划与其他计划相比相当有效,请也告诉我。
假设linenumbers.txt
每行有一个数字
awk 'NR == FNR{a[$0]; next};FNR in a' linenumbers.txt sourcefile.csv > extractedrecords.tsv
可能会做的工作。
或者,用 bash
join -t':' -o2.1,2.2 <(sort linenumbers.txt) <(awk '{print NR":"$0}' \
sourcefile.csv | sort -k1,1 -t':') | sort -k1,1n -t':' | cut -f2- -d':'
由于join
不支持按数字排序的输入文件,因此需要通过箍进行所有额外的跳跃
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句