如何使用bash文件删除文件中的最后n行?

时间:2013-09-16 01:34:13

标签: sed

我想删除文件中的某些特定行。例如,我有一个包含这些行的文件:

+1  1:-51.000000
+1  1:-47.000000
+1  1:-53.000000
+1  1:-48.000000
+1  1:-49.000000
+1  1:-42.000000

我想删除最后3行。如何在bash文件中执行此操作?

4 个答案:

答案 0 :(得分:0)

nl=`wc -l fileName | awk 's=$1-3{print s}'`; head -n $nl fileName > file_withoutlast3rows.txt

wc -l计算文件中的总行数。使用awk,您可以打印总行数-3。然后使用带有head选项的-n来只读取那么多行。您还可以使用>将这么多行放入新文件中。

您也可以使用awk执行此操作:

awk -v nl=$(wc -l <fileName) 'NR<(nl-2)' fileName

答案 1 :(得分:0)

只需计算行数,计算第一个索引,然后使用sed -i将其删除。

COUNT=$(wc -l < file)
INDEX=$((COUNT > 3 ? COUNT - 2 : 1))
sed -i "$INDEX,\$d" file

或者只使用bash的readarray:

readarray LINES < file
LAST=$((${#LINES[@]} > 3 ? ${#LINES[@]} - 3 : 0))
printf "%s" "${LINES[@]:0:LAST}" > file

答案 2 :(得分:0)

这可能适合你(GNU sed):

 sed '1N;$!N;$d;P;D' file

表示5行:

 sed ':a;$!N;s/.*/&/m5;Ta;$d;P;D' file

答案 3 :(得分:0)

仅使用awk而不使用wc之类的外部命令。 阅读文件两次

awk 'NR==FNR {i++;next} (i-FNR)>=3' file file