ファイル内の特定の行を削除したい。たとえば、次の行を含むファイルがあります。
+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ファイルでそれを行う方法は?
単に行数を数え、最初のインデックスを計算し、それを使用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
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
awk
のような外部コマンドなしでのみ使用しますwc
。ファイルを 2 回読み取る
awk 'NR==FNR {i++;next} (i-FNR)>=3' file file