Text-Processing
從命令“粘貼”的輸出創建表頭
我的文件夾(數據)包含大量文本文件。每個文本文件包含一列數字,該列包含 30 個數字。我想創建組合這些文本文件中的列的表。我使用了以下命令:
cd data paste *.txt > all_data.txt
輸出如下:
0.834679 0.612341 0.510057 0.580128 ..... 1.837894 1.061547 0.961449 1.343096 ..... 1.638215 1.024628 1.113596 1.80506 ..... 1.596119 0.971842 1.14204 1.73881 ..... 1.568142 1.025716 1.217219 1.769668 ..... 1.554016 0.977165 1.226769 1.786335 ..... 1.543137 1.001812 1.247598 1.840443 ..... 1.491823 0.99437 1.28337 1.784271 ..... 1.371208 0.931998 1.259749 1.717408 ..... 1.390867 0.905996 1.300722 1.739213 ..... 1.35813 0.283377 1.307122 1.733058 ..... ......
此命令將所有列組合在一個大電子表格中。我的問題:有沒有辦法粘貼文本文件中的每一列並將文本文件名標題添加到該列。如下:
text_file1 text_file2 text_file3 text_file4 .... 0.834679 0.612341 0.510057 0.580128 ..... 1.837894 1.061547 0.961449 1.343096 ..... 1.638215 1.024628 1.113596 1.80506 ..... 1.596119 0.971842 1.14204 1.73881 ..... 1.568142 1.025716 1.217219 1.769668 ..... 1.554016 0.977165 1.226769 1.786335 ..... 1.543137 1.001812 1.247598 1.840443 ..... 1.491823 0.99437 1.28337 1.784271 ..... 1.371208 0.931998 1.259749 1.717408 ..... 1.390867 0.905996 1.300722 1.739213 ..... 1.35813 0.283377 1.307122 1.733058 ..... ......
你可以做:
paste_with_header() ( IFS=$(printf '\t') # or IFS=$'\t' with some shells printf '%s\n' "$*" paste -- "$@" ) paste_with_header text_file* > all_data.txt
"$*"
擴展為與 的第一個字元連接的位置參數列表(函式的參數)$IFS
,我們將其設置為TAB
,該字元paste
也用於連接文件的行。要刪除標題中的文件副檔名,請使用
zsh
:paste_with_header() ( printf '%s\n' ${(pj:\t:)@:r} paste -- "$@" )
${@:r}
擴展為每個位置參數的根名稱(已刪除副檔名)。j:\t:
要加入的參數擴展標誌\t
。這被p
解釋\t
為TAB
或者使用
ksh93
,zsh
或者bash
假設文件確實有副檔名,或者它們的路徑組件中沒有目錄包含點:paste_with_header() ( IFS=$'\t' printf '%s\n' "${@%.*}" paste -- "$@" )
${@%.*}
刪除與.*
每個位置參數末尾匹配的最短尾隨部分(foo.txt
變成foo
,但要注意./foo
變成空字元串)。(那些顯然假設文件名不包含製表符或換行符)。