Shell-Script

在條件和輸出重定向文件中帶有變數的 awk

  • March 18, 2015

我希望獲得有關此命令的一些幫助,因為我在文件中找不到任何可以涵蓋我想要的所有內容的內容。

我有一些全域變數,所以我寧願將它們排除在 awk 之外。

   chr="chr10"
   inpfile="exome.bed"
   outfile="exons_chr.bed" -> which should be composed according to chr,
                              so: "exons_" $chr ".bed"

我想以一般形式應用 awk,這樣,對於使用者輸入的任何“chr”和任何“infile”,我都可以有一個單行命令來根據以下條件創建輸出:

   awk '$1=="$chr" $infile > "exons_"$chr".bed"

所以,我也想每次都編寫輸出文件名。當我使用特定值執行它時,它可以工作。我怎樣才能使它與變數一起工作,更通用,以便我可以在腳本中使用它?

有沒有辦法在更多行中做到這一點,比如:

   awk ' { if ($1=="$chr") -> copy lines to outfile }' infile

你有多種選擇…

要將 shell 變數傳遞給 awk 並在字元串比較中使用它們並讓 shell 創建文件:

awk -v chr="$chr" '$1==chr' "$infile" > "exons_${chr}.bed"

另外讓 awk 將輸出輸出到文件中:

awk -v chr="$chr" '$1==chr { print > "exons_" chr ".bed" }' "$infile"

引用自:https://unix.stackexchange.com/questions/190971