[英]How do I loop over multiple files to extract specific columns and save as separate files?
我有許多*.txt
文件。 我想從這些文件中的每一個中提取第3列和第5列,並將它們另存為新文件,並保留其原始名稱並帶有new_
擴展名。 我在嘗試執行此操作時遇到了下面的bash循環,但沒有執行我想要的操作。 有人可以幫我嗎?
for i in *.txt; do
cut -f 3,5 $i > /media/owner/new_$i_assembly.txt
done
簡單方法:
for f in *.txt; do
cut -d$'\t' -f3,5 "$f" > "/media/owner/new_${f}_assembly.txt"
done
如果除制表符之外可能還有空白,則可以使用以下awk
方法:
for f in *.txt; do
awk '{ print $3,$5 }' OFS='\t' "$f" > "/media/owner/new_${f}_assembly.txt"
done
您必須確保並明確告訴Bash擴展變量$i
,否則它將拾取不需要的字符並擴展變量$i_assembly
:
for i in *.txt; do
cut -f 3,5 "$i" > "/media/owner/new_${i}_assembly.txt"
done
如果您不希望擴展名包含在新名稱中,請使用參數擴展${i%.*}
刪除所有內容,直到第一個.
從頭開始。
for i in *.txt; do
cut -f 3,5 "$i" > "/media/owner/new_${i%.*}_assembly.txt"
done
如果您決定采用一種可能導致路徑而不只是文件名的其他方法(例如: **/*.txt
),則可以再次使用參數擴展來僅獲取文件名:
for i in **/*.txt; do
base=${i##*/}
base=${base%.*}
cut -f 3,5 "$i" > "/media/owner/new_${base}_assembly.txt"
done
另請注意, TAB是cut
的默認定界符,您無需使用-d
選項來指定它:
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.