簡體   English   中英

使用 zcat 和 sed 或 awk 編輯壓縮的 .gz 文本文件

[英]Use zcat and sed or awk to edit compressed .gz text file

我正在嘗試通過刪除第 2、6、10、14 行的前六個字符來編輯壓縮的 fastq.gz 文本文件......我現在有兩種不同的方法,使用 awk 或 sed,但這些只是如果文件被解壓縮似乎工作。 我想在不解壓縮文件的情況下編輯文件,並嘗試了以下代碼而沒有使其工作。 謝謝。

使用 sed:

zcat /dir/* | sed -i~ '2~4s/^.\{6\}//'

使用 awk:

zcat /dir/* | awk 'NR%4==2 {gsub(/^....../,"")} 1'

您不能繞過壓縮,但可以以自動方式將解壓縮/編輯/重新壓縮鏈接在一起:

for f in /dir/*; do
  cp "$f" "$f~" &&   
  gzip -cd "$f~" | sed '2~4s/^.\{6\}//' | gzip > "$f"
done

如果您對操作非常有信心,可以通過在循環體的末尾添加rm "$f~"來刪除備份文件。

我編寫了一個名為zawk的腳本,它可以在本地執行此操作。 它類似於glenn jackman 對這個問題副本的回答,但它處理awk選項和幾種不同的壓縮機制和輸入方法,同時保留FILENAMEFNR

你會像這樣使用它:

zawk 'awk logic goes here' log*.gz

這並沒有解決 sed 的“就地”標志( -i )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM