![在 bash 中將 txt 檔案中的行拆分為 excel 列](https://rvso.com/image/1070318/%E5%9C%A8%20bash%20%E4%B8%AD%E5%B0%87%20txt%20%E6%AA%94%E6%A1%88%E4%B8%AD%E7%9A%84%E8%A1%8C%E6%8B%86%E5%88%86%E7%82%BA%20excel%20%E5%88%97.png)
我有一個像這樣的文字檔(lines.txt):
ab.qq
1
2
3
cd.qq
3
4
5
ef.qq
7
8
9
我試圖從 excel/csv 檔案中的每 4 行移動到不同的列,基本上是用這個 bash 腳本列印的內容:
#!/bin/bash
split -l 4 lines.txt outsq
paste -d ' ' outsq*
ab.qq cd.qq ef.qq
1 3 7
2 4 8
3 5 9
我希望得到一些幫助,將其寫入 excel/csv 文件,並且產生結果的任何其他方式也絕對沒問題(無需拆分/粘貼)。
答案1
這rs
(reshape) 實用程式最初來自 BSD,對於這類事情很有用。
例如:
$ rs -e -t 4 0 < lines.txt
ab.qq cd.qq ef.qq
1 3 7
2 4 8
3 5 9
在哪裡
-e
表示將每一行輸入視為一個元素-t
將列轉置為行4 0
輸出 4 行和所需數量的列
-c
和選項-C
分別設定輸入和輸出分隔符號 - 因此對於 CSV 輸出,您可以使用
$ rs -etC, 4 0 < lines.txt
ab.qq,cd.qq,ef.qq,
1,3,7,
2,4,8,
3,5,9,
rs
可從 Ubuntu 儲存庫中以同名軟體包形式取得universe
。
或者,您可以在 awk 中執行類似的操作:
$ awk '
{a[NR%4] = a[NR%4] == "" ? $0 : a[NR%4] "," $0}
END {for(i=1;i<=4;i++) print a[i%4]}
' lines.txt
ab.qq,cd.qq,ef.qq
1,3,7
2,4,8
3,5,9