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

単に行数を数え、最初のインデックスを計算し、それを使用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
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

awkのような外部コマンドなしでのみ使用しますwc。ファイルを 2 回読み取る

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