我想删除文件中的一些特定行。例如,我有一个包含这些行的文件:
+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 文件中执行此操作?
我想删除文件中的一些特定行。例如,我有一个包含这些行的文件:
+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 文件中执行此操作?
nl=`wc -l fileName | awk 's=$1-3{print s}'`; head -n $nl fileName > file_withoutlast3rows.txt
wc -l
计算文件中的总行数。使用 awk,您可以打印总行数-3
。然后使用head
with-n
选项仅读取那么多行。您还可以使用 . 将那么多行放入一个新文件中>
。
您也可以使用它awk
来执行此操作:
awk -v nl=$(wc -l <fileName) 'NR<(nl-2)' fileName
只需计算行数,计算第一个索引,然后使用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
这可能对您有用(GNU sed):
sed '1N;$!N;$d;P;D' file
比如说5行:
sed ':a;$!N;s/.*/&/m5;Ta;$d;P;D' file
仅awk
在没有外部命令的情况下使用,例如wc
. 读取文件两次
awk 'NR==FNR {i++;next} (i-FNR)>=3' file file