有沒有一種簡單的方法可以使用 BASH 的內置程式或 GNU 等效程式從變數(每列一個變數)創建列,這些變數是列出目錄的結果?
var1 的行應該在第 1 列。var2 的行應該在第 2 列。
我已經到了那里,但未能為每個變數的行內容獲得孤立的列。
var1=$( ls ./somedir1/* | ggrep ‘matching filetype1’ )
var2=$( ls ./somedir2/* | ggrep ‘matching filetype2’ )
我試過了:
paste <(printf %s "$var1”) <(printf %s "$var2”)
創建 2 列,但 var2 的行從第 1 列的 var1s 下方開始,向右縮進,然后在第 2 列繼續。
paste <(printf %s "$var1”) <(printf %s "$var2”) | column -t
給出干凈的列(沒有縮進),但同樣的問題 - var2 的行從第 1 列的 var1s 以下開始,然后在第 2 列繼續。
uj5u.com熱心網友回復:
不將模式的輸出處理ls為引數,而是將模式擴展為引數,并用于printf格式化作為引數擴展的檔案路徑的輸出。
paste <(cd somedir1 && printf '%-40s\n' *.filetype1) <(cd somedir2 && printf '%-40s\n' *.filetype2)
cd somedir1將目錄更改為somedir1,&&并有條件地printf '%-40s\n' *.filetype1列印與模式匹配的格式化換行符分隔的檔案名*.filetype1。該格式還確保 40 個字符的列寬。
paste將兩個串列合并到并排的列中。
uj5u.com熱心網友回復:
#!/bin/bash
column -t <(
paste <(
find /path/to/somedir1 -maxdepth 1 -type f -name "match1" -printf "%f\n"|sort
) \
<(
find /path/to/somedir2 -maxdepth 1 -type f -name "match2" -printf "%f\n"|sort
)
)
uj5u.com熱心網友回復:
默認情況下paste,使用制表符來連接行,而column使用空格符來分割欄位,因此您必須在column命令中指定分隔符:
paste <(printf %s "$var1") <(printf %s "$var2”) |
column -s '\t' -t
除此之外,ls ./somedir1/*真的是你想要的嗎?它的外殼等價物是printf '%s\n' ./somedir1/* ./somedir1/*/*
| ggrep 'matching filetype1'您還可以通過使用更具體的 glob 來擺脫./somedir1/*.filetype1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/493705.html
