我不確定問這個問題的最佳措辭,但我試圖將前四行連接到接下來的四行,依此類推,直到檔案結束。
我的資料看起來像:
aggaacgtgagttgaaaattgaagcgacaaacttggtttcatgtcctgtttgtggaaaga
catctattgttagagacaatatattgtctgatctgacttatctgcatgttc---------
. ** ..* * *. * .* * .*..**..** . * ****.
gcataaaaggaatggacacaatcataaatgaacatcttgatatctgccttacaagaaggt
----------tgtggattcctttctttttccttttggagatatctgccttacaagaaggt
.****. * *. * * . * **********************
ccaaacgaaaacttacccaacgcacactacttcagtttggtgttggatcaagtaccaaaa
ccaaacgaaaacttacccaacgcacactacttcagtttggtgttggatcaagtaccaaaa
************************************************************
我試圖將每四行合并/連接到四行之前創建一個看起來像這樣的水平檔案格式:
aggaacgtgagttgaaaattgaagcgacaaacttggtttcatgtcctgtttgtggaaagagcataaaaggaatggacacaatcataaatgaacatcttgatatctgccttacaagaaggtccaaacgaaaacttacccaacgcacactacttcagtttggtgttggatcaagtaccaaaa
catctattgttagagacaatatattgtctgatctgacttatctgcatgttc-------------------tgtggattcctttctttttccttttggagatatctgccttacaagaaggtccaaacgaaaacttacccaacgcacactacttcagtttggtgttggatcaagtaccaaaa
. ** ..* * *. * .* * .*..**..** . * ****. .****. * *. * * . * **********************************************************************************
我知道我可以使用paste - -每隔一行洗掉一個換行符,但是將檔案的前四行的不同行每隔四行粘貼在一起的最簡單方法是什么?
uj5u.com熱心網友回復:
你可以用 perl:
#!/bin/perl
use strict;
use warnings;
my %lines; # hash container to store the lines
while(<>) { # read lines from stdin
chomp; # remove newline
my $idx = ($. - 1) % 4; # calculate index of line [0,4)
$lines{$idx} .= $_; # concatename the current line to what's at $idx
}
# Done, print the result:
for(my $i = 0; $i < 4; $i) {
print $lines{$i} ."\n";
}
uj5u.com熱心網友回復:
一種方法是將每一行存盤在一個陣列中以在最后列印:
awk -v n=4 '
{ a[NR]=$0 }
END {
for (i=1; i<=n; i ) {
for (j=i; j<=NR; j =n) {
printf "%s", a[j]
}
print ""
}
}' file
另一種方法是讀取檔案 4 次(這樣可以避免將整個檔案存盤在記憶體中):
awk -v n=4 '
FNR==1 {
if (c ) print ""
}
! ((NR-c)%n) { printf "%s", $0 }
END {
if (c) print ""
}
' file file file file
這可以使用 shell 回圈來完成:
for c in 1 2 3 4
do
awk '! ((NR-c)%n)' n=4 c="$c" ORS= file
echo
done
以上任何一項的輸出將是:
aggaacgtgagttgaaaattgaagcgacaaacttggtttcatgtcctgtttgtggaaagagcataaaaggaatggacacaatcataaatgaacatcttgatatctgccttacaagaaggtccaaacgaaaacttacccaacgcacactacttcagtttggtgttggatcaagtaccaaaa
catctattgttagagacaatatattgtctgatctgacttatctgcatgttc-------------------tgtggattcctttctttttccttttggagatatctgccttacaagaaggtccaaacgaaaacttacccaacgcacactacttcagtttggtgttggatcaagtaccaaaa
. ** ..* * *. * .* * .*..**..** . * ****. .****. * *. * * . * **********************************************************************************
uj5u.com熱心網友回復:
如果您的檔案很大,將其全部內容存盤在變數中或對其進行多次處理,可能會導致記憶體或性能問題。即時生成 4 個不同的檔案并將它們連接在一起可能會有所幫助。GNU awk(和bash)示例:
awk '{
printf("%s", $0) > "file." (NR-1)%4 ".part"
}
END {
for(i=0; i<4; i ) print "" > "file." i ".part"
}' file.txt
cat file.{0..3}.part > file.new.txt
rm -f file.{0..3}.part
uj5u.com熱心網友回復:
似乎每三行由一個空行分隔。如果是這種情況,這個awk程式可能就是你要找的:
awk 'BEGIN { RS = ""; FS = "\n" }
{ for (i = 1; i <= 3; i) line[i] = line[i] $i }
END { for (i = 1; i <= 3; i) print line[i] }
' file
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/384492.html
上一篇:成功@Digits檢查后,立即在Hibernate-Validator中將String決議為Integer
下一篇:SessionNotCreatedException:訊息:會話未創建:此版本的ChromeDriver僅支持使用Selenium和ChromeDriver的Chrome版本97
