[英]Matching first column of file with awk, difficulty with quotes
我的輸入文件如下所示
Chr1 1
Chr1 2
Chr2 3
我想根據第一列中的Chr將輸入文件拆分為多個文件。
應該有兩個輸出文件輸出文件1(名為tmpChr1):
Chr1 1
Chr1 2
輸出文件2(名為tmpChr2):
Chr2 3
這是迄今為止的代碼:
#!/bin/bash
for((chrom=1;chrom<30;chrom++)); do
echo Chr${chrom}
chr=Chr${chrom}
awk "\$1==$chr{print \$1}" input.txt > tmp$chr
done
行awk "\\$1==$chr{print \\$1}"
是問題,awk似乎需要在$ chr附近引用以正確匹配$ 1
awk '$1=="Chr1"{print $1}'
工作,tmpChr1成立
awk '$1=="$chr"{print $1}'
也不起作用
並沒有awk "$1=='$chr'{print $1}"
真的在報價上掙扎,有人能說清楚我應該做些什么嗎?
永遠不要在awk腳本周圍使用雙引號,並且絕不允許shell變量作為awk腳本主體的一部分進行擴展。 請參閱http://cfajohnson.com/shell/cus-faq-2.html#Q24
盡管如此,你仍然可以通過一般方法取消標記。 你只需要這個awk腳本:
awk '{print > ("tmp"$1)}' file
看:
$ ls
file
$ cat file
Chr1 1
Chr1 2
Chr2 3
$ awk '{print > ("tmp"$1)}' file
$ ls
file tmpChr1 tmpChr2
$ cat tmpChr1
Chr1 1
Chr1 2
$ cat tmpChr2
Chr2 3
無論何時在shell中編寫循環只是為了操作文本,你都有錯誤的方法。 UNIX shell是一種環境,可以使用該語言調用工具來對這些調用進行排序。 用於操作文本的UNIX工具是awk。 因此,如果您需要在UNIX中操作文本,請編寫一個awk腳本並從shell調用它,這就是全部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.