Text-Processing
修復 phylip 生物資訊學文件的標題以準確反映文件中更新的樣本數量
我有一個我正在使用的數據集,它由我一直在編輯的 phylip 文件組成。Phylip 格式是一種生物資訊學格式,其中包含作為標題的樣本數量和序列長度,然後是每個樣本及其序列。例如:
5 10 sample_1 gaatatccga sample_2 gaatatccga sample_3 gaatatcgca sample_4 caatatccga sample_5 gaataagcga
我的問題是,在修剪這些數據集時,標題中的樣本數不再準確(例如,在上面的範例中可能會說五個,但我已經修剪為只有三個樣本)。我需要做的是用新的、準確的樣本計數替換該樣本計數,但我無法弄清楚如何在不失去序列長度編號(例如 10)的情況下這樣做。
我有 550 個文件,因此不能簡單地手動執行此操作。我可以對 wc 進行循環,但我需要再次保留該序列長度資訊,並以某種方式將其與新的、準確的 wc 結合起來。
如果我正確理解您的要求,您可以使用以下
awk
命令:awk -v samples="$(($(grep -c . input)-1))" 'NR == 1 { $1=samples }1' input
samples
將設置為input
文件中的行數減一(因為您不計算標題行)。
awk
然後將第一行的第一列更改為新的樣本編號並列印所有內容。$ cat input 5 10 sample_1 gaatatccga sample_2 gaatatccga sample_3 gaatatccga $ awk -v samples="$(($(grep -c . input)-1))" 'NR == 1 { $1=samples }1' input 3 10 sample_1 gaatatccga sample_2 gaatatccga sample_3 gaatatccga
使用 GNU awk,您可以使用該
-i
標誌來修改文件,但我更願意製作第二組修改後的文件,以確保進行了正確的更改。就像是:
for file in *.phy; do awk -v samples="$(($(grep -c . "$file")-1))" 'NR == 1 { $1=samples }1' "$file" > "${file}.new" done