Text-Processing

刪除僅包含數字的列

  • May 8, 2022

我有一個包含一些數據的表,我需要刪除僅包含數字(Nr.,Cod,Tiraj)的列:

Nr.     Autor         Titlu        Cod     Tiraj     Tara
1    Gauss Carl   Aritmetica 1   297485   11454   Germania
2    Gauss Carl   Aritmatica 2   297484   10254   Germania
3    Gauss Carl   Aritmetica 3   297455   45872   Germania

結果應該是這樣的:

Autor         Titlu         Tara
Gauss Carl   Aritmetica 1   Germania
Gauss Carl   Aritmatica 2   Germania
Gauss Carl   Aritmetica 3   Germania

列由TAB

我使用這個創建了表:

.TS
tab(@);
c c c c c c .
Nr.@Autor@Titlu@Cod@Tiraj@Tara
1@Gauss Carl@Aritmetica 1@297485@11454@Germania
2@Gauss Carl@Aritmatica 2@297484@10254@Germania
3@Gauss Carl@Aritmetica 3@297455@45872@Germania
.TE

您想從或多或少為 CSV 且帶有一些垃圾行並用作欄位分隔符的數據集中刪除 和列NR.Cod``Tiraj``@

sed -e 1,3d -e '$d' file |
csvcut -d @ -C 'Nr.,Cod,Tiraj' |
csvformat -D @

這個的輸出將是

Autor@Titlu@Tara
Gauss Carl@Aritmetica 1@Germania
Gauss Carl@Aritmatica 2@Germania
Gauss Carl@Aritmetica 3@Germania

添加sed刪除的內容並針對新的列數進行調整,並將其寫入新文件:

{
   printf '%s\n' .TS 'tab(@);' 'l l l .'
   sed -e 1,3d -e '$d' file |
   csvcut -d @ -C 'Nr.,Cod,Tiraj' |
   csvformat -D @
   echo .TE
} >file.new

csvcut和實用程序是 csvkit的csvformat一部分,csvkit 是一個用於處理 CSV 文件的工具包,可從https://csvkit.readthedocs.io/en/latest/獲得

最終表格將使用nroff -t file.new.

您也可以通過執行初始管道的輸出來獲得表格的變體column -s @ -t

$ sed -e 1,3d -e '$d' file | csvcut -d @ -C 'Nr.,Cod,Tiraj' | csvformat -D @ | column -s @ -t
Autor       Titlu         Tara
Gauss Carl  Aritmetica 1  Germania
Gauss Carl  Aritmatica 2  Germania
Gauss Carl  Aritmetica 3  Germania

或者,您可以使用csvlook

$ sed -e 1,3d -e '$d' file | csvcut -d @ -C 'Nr.,Cod,Tiraj' | csvlook
| Autor      | Titlu        | Tara     |
| ---------- | ------------ | -------- |
| Gauss Carl | Aritmetica 1 | Germania |
| Gauss Carl | Aritmatica 2 | Germania |
| Gauss Carl | Aritmetica 3 | Germania |

…取決於您實際想要的輸出。

引用自:https://unix.stackexchange.com/questions/687063