我想删除文件中的某些特定行。例如,我有一个包含这些行的文件:
+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文件中执行此操作?
答案 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