簡體   English   中英

如何遍歷多個文件以提取特定的列並另存為單獨的文件?

[英]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

另請注意, TABcut的默認定界符,您無需使用-d選項來指定它:

-d, --delimiter=DELIM
      use DELIM instead of TAB for field delimiter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM