0

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

+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

4 回答 4

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

wc -l计算文件中的总行数。使用 awk,您可以打印总行数-3。然后使用headwith-n选项仅读取那么多行。您还可以使用 . 将那么多行放入一个新文件中>

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

awk -v nl=$(wc -l <fileName) 'NR<(nl-2)' fileName
于 2013-09-16T02:23:31.950 回答
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
于 2013-09-16T03:32:01.550 回答
0

这可能对您有用(GNU sed):

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

比如说5行:

 sed ':a;$!N;s/.*/&/m5;Ta;$d;P;D' file
于 2013-09-16T06:43:44.803 回答
0

awk在没有外部命令的情况下使用,例如wc. 读取文件两次

awk 'NR==FNR {i++;next} (i-FNR)>=3' file file
于 2013-09-16T09:46:05.270 回答