Bash
在一個兩列文件中寫入兩個變數(製表符分隔)
你好 GNU/Linux 新手。
我想在一個兩列製表符分隔的文件中寫入兩個變數。在我的程式碼中,變數是
$sample_name
和$file
。我使用命令:
touch
創建文件和echo -e $sample_name $file | column -t >> $output_file
寫每一行。雖然這會產生一個單列文件。有任何想法嗎?
簡化腳本:
touch $output_file for file in $path/*.g.vcf; do sample_name=`echo $file | grep -P 'HG(\d+)(?=.g)' -o` echo -e $sample_name $file | column -t >> $output_file done
預期輸出(查看輸出文件):
HG00321 ./.../HG00321/HG00321.g.vcf HG00322 ./.../HG00322/HG00322.g.vcf # and so on
您不需要使用
column -t
(事實上,這將用空格擴展您的選項卡,以便列正確對齊,無論寬度如何)。只需使用printf
. 並記住雙引號你的變數。例如for file in "$path/"*.g.vcf; do sample_name=$(echo "$file" | grep -P 'HG(\d+)(?=.g)' -o) printf "%s\t%s\n" "$sample_name" "$file" >> "$output_file" done
順便說一句,不需要
touch
文件來創建它。>>
如果文件不存在,重定向將創建一個文件。此外,您可以使用
<<<
而不是echo
與grep
行。例如sample_name=$(grep -oP 'HG(\d+)(?=.g)' <<< "$file")
這會將變數的內容(值)重定向
$file
到 grep 命令中。無論哪種方式,實際上都沒有任何顯著的好處(除非變數包含改變echo
行為的值,例如-n
,-e
,-E
或一些反斜杠轉義字元,例如\n
,\t
,\0nnn
,\xHH
等 - 請參見help echo
bash。順便說一句,這是為什麼printf
在這些天被推薦echo
),但您可能會發現它更容易閱讀。