Tôi có một tệp có 2 cột và tôi muốn sử dụng các giá trị từ cột thứ hai để đặt phạm vi trong lệnh cắt để chọn phạm vi ký tự từ một tệp khác. Phạm vi mong muốn của tôi là ký tự ở vị trí của giá trị trong cột thứ hai cộng với 10 ký tự tiếp theo. Tôi sẽ đưa ra một ví dụ trong một thời gian.Cách lặp một dãy biến trong lệnh cắt
file của tôi là một cái gì đó như thế:
file với 2 cột và không có dòng trống giữa các dòng (file1.txt):
NAME1 10
NAME2 25
NAME3 48
NAME4 66
tập tin mà tôi muốn trích xuất phạm vi biến ký tự (chỉ một dòng rất dài không có dấu cách và không có phông chữ đậm) (file2.txt):
GATCGAGC GG GATTCTTTTT TTTTA GGCGAGTCAG CTAGCATCAGCTA CGAGAGGCGA GGGCGGGC TATCACGACT ACGACTACGACTACAGCATCAGCATCAGCGCACTAGAGCGAGGCTAGCTAGCTACGACTACGATCAGCATCGCACATCGACTACGATCAGCATCAGCTACGCATCGAAGAGAGAGC
... hoặc, theo nghĩa đen hơn (ví copy/paste để kiểm tra):
GATCGAGCGGGATTCTTTTTTTTTAGGCGAGTCAGCTAGCATCAGCTACGAGAGGCGAGGGCGGGCTATCACGACTACGACTACGACTACAGCATCAGCATCAGCGCACTAGAGCGAGGCTAGCTAGCTACGACTACGATCAGCATCGCACATCGACTACGATCAGCATCAGCTACGCATCGAAGAGAGAGC
mong muốn dẫn đến tập tin, một chuỗi trên mỗi dòng (result.txt):
GATTCTTTTT
GGCGAGTCAG
CGAGAGGCGA
TATCACGACT
Tệp kết quả sẽ có các ký tự từ 10-20, 25-35, 48-58 và 66-76, mỗi ký tự trong một dòng mới. Vì vậy, nó sẽ luôn luôn giữ phạm vi 10, nhưng ở các điểm bắt đầu khác nhau và những điểm bắt đầu được thiết lập bởi các giá trị trong cột thứ hai từ tập tin đầu tiên.
Tôi đã thử các lệnh:
for i in $(awk '{print $2}' file1.txt);
do
p1=$i;
p2=`expr "$1" + 10`
cut -c$p1-$2 file2.txt > result.txt;
done
tôi không nhận được bất kỳ kết quả hoặc thông báo lỗi.
Tôi cũng đã cố gắng:
while read line; do
set $line
p2=`expr "$2" + 10`
cut -c$2-$p2 file2.txt > result.txt;
done <file1.txt
lệnh cuối cùng này mang lại cho tôi một thông báo lỗi:
cut: invalid range with no endpoint: -
Try 'cut --help' for more information.
expr: non-integer argument
Đó là một câu hỏi rất tốt vì là Đầu tiên. Rõ ràng và nó cho thấy nỗ lực. – klutt
Hãy nhớ chấp nhận câu trả lời. – klutt