Delete lines from file with SED or AWK

前端 未结 3 837
旧时难觅i
旧时难觅i 2020-12-09 04:57

Ive seen many variations, very confused on how to solve these 3 problems.

  1. deleting all rows except the first from a file
  2. deleting a row from file with
相关标签:
3条回答
  • 2020-12-09 05:25

    With awk:

    # delete line 1
    awk 'NR == 1 {next} {print}' file
    
    # delete line number stored in shell variable $n
    awk -v n=$n 'NR == n {next} {print}' file
    
    # delete between lines $a and $b inclusive
    awk -v m=$a -v n=$b 'm <= NR && NR <= n {next} {print}' file
    

    To save a few chars, {print} can be replaced just with 1

    To overwrite the original file, you have to do something like this

    awk '...' file > tmpfile && mv tmpfile file
    
    0 讨论(0)
  • 2020-12-09 05:25

    you can just use bash if your system has it. The basic idea behind is to set a count and incrementing this count while iterating the file.

    1) deleting all rows except the first from a file

    read -r line < file; echo "$line" > temp && mv temp file
    

    2) deleting a row from file with a line number

    declare -i count=0
    while read -r line
    do
      ((count++))
      case "$count" in
        10) continue;;
        * ) echo "$line";;
      esac
    done < file > temp && mv temp file
    

    3) deleting rows from a file with a range of line numbers eg from 10 to 20

    declare -i count=0
    while read -r line
    do
      ((count++))
      if (( $c < 10 && $c > 20 ));then
        echo "$line";;
      fi
    done < file > temp && mv temp file
    
    0 讨论(0)
  • 2020-12-09 05:35

    Using sed:

    Delete 1st line:

    sed '1d' file-name
    

    Delete 10th line:

    sed '10d' file-name
    

    Delete line # 5 to 10

    sed '5,10d' file-name
    

    All above sed commands will write output on stdout that you can redirect to another file if you want or use -i flag of sed to inline edit the file.

    0 讨论(0)
提交回复
热议问题