150 GB の大きな CSV ファイルがあり、最初の 17 行と最後の 8 行を削除したいと考えています。私は次のことを試しましたが、正しく機能していないようです
sed -i -n -e :a -e '1,8!{P;N;D;};N;ba'
と
sed -i '1,17d'
誰かがsedまたはawkを手伝ってくれるのだろうか、1つのライナーは素晴らしいでしょうか?
150 GB の大きな CSV ファイルがあり、最初の 17 行と最後の 8 行を削除したいと考えています。私は次のことを試しましたが、正しく機能していないようです
sed -i -n -e :a -e '1,8!{P;N;D;};N;ba'
と
sed -i '1,17d'
誰かがsedまたはawkを手伝ってくれるのだろうか、1つのライナーは素晴らしいでしょうか?
head
とはまたはtail
よりも仕事に適しています。sed
awk
tail -n+18 file | head -n-8 > newfile
awk -v nr="$(wc -l < file)" 'NR>17 && NR<(nr-8)' file
すべてのawk:
awk 'NR>y+x{print A[NR%y]} {A[NR%y]=$0}' x=17 y=8 file
Try this :
sed '{[/]<n>|<string>|<regex>[/]}d' <fileName>
sed '{[/]<adr1>[,<adr2>][/]d' <fileName>
どこ
/.../=区切り記号
n = 行番号
string = 行内で見つかった文字列
regex = 検索されたパターンに対応する正規表現
addr = 行のアドレス (数値またはパターン)
d = 削除
今日、シェルについてこれを学びました。
{
ghead -17 > /dev/null
sed -n -e :a -e '1,8!{P;N;D;};N;ba'
} < my-bigfile > subset-of
消費しない を使用する必要があるhead
ためghead
、GNU coreutils から を使用します。
LENGTH=`wc -l < file`
head -n $((LENGTH-8)) file | tail -n $((LENGTH-17)) > file
編集:mtkがコメントに投稿したように、これは機能しません。wc
ファイルの長さを使用して追跡する場合は、次を使用する必要があります。
LENGTH=`wc -l < file`
head -n $((LENGTH-8)) file | tail -n $((LENGTH-8-17)) > file
また:
LENGTH=`wc -l < file`
head -n $((LENGTH-8)) file > file
LENGTH=`wc -l < file`
tail -n $((LENGTH-17)) file > file
このソリューションがチョロバによって投稿されたソリューションよりもエレガントではない理由:)