假设我在同一目录下有100个文本,即text1.txt,text2.txt,...,text100.txt。我想从每个文本中提取某些行(例如前100行),并将这些行分别保存到另外新的100行文本中,即每个新文本有 100 行。
我知道head -100 text1.txt > text1_new.txt
,head -100 text2.txt > text2_new.txt
...可以做到。但是有没有更有效的方法可以在终端中同时提取它们呢?
谢谢!!
答案1
一种方法是
find . -name "text*.txt" -type f -print0 | xargs -0 -I{} sh -c 'f="{}"; head -100 "$f" > "${f%.txt}_new.txt"'
find . -name "text*.txt" -type f
查找目录中的所有文本文件-print0
使用空字符打印文件路径以保留空格xargs -0
接受以 null 结尾的参数-I{}
用作参数的占位符sh -c
使用命令字符串执行 dashf="{}"
将参数保存在变量中f
head -100 "$f"
头命令"${f%.txt}_new.txt"
将参数中的“.txt”替换为“_new.txt”
答案2
您可以遍历文件
for f in *.txt
do
head -n100 "$f" > "${f%.txt}_new.txt"
done
需要注意的是,*.txt
会在到达时展开,以列出所有匹配的文件。如果您已经运行此脚本(部分或完全),它也会匹配一些结果文件。解决方案是在运行之前删除它们 ( rm *_new.txt
),或者收紧模式。