2014-02-09 89 views
1

說我有一個文件中的一些文字是這樣的:對齊文本通過使用shell命令字符串

lorem ipsum asdf gh 12345 
hello, world! asdf gh this is a test 
ee asdf gh ii 

注意,每一行包含「ASDF GH」。我希望能夠使用一些shell命令(S)基於對分隔字符串對齊文本,所以我可以做的:

$ cat my-file | some-command 
lorem ipsum  asdf gh 12345 
hello, world! asdf gh this is a test 
ee    asdf gh ii 

在這個例子中,我添加周圍的分隔符多餘的空格,但它兩種方式都無關緊要。也就是說,輸出結果可能是:

$ cat my-file | some-command 
lorem ipsum asdf gh 12345 
hello, world! asdf gh this is a test 
ee   asdf gh ii 

有沒有簡單的方法來做到這一點?我知道column可以列出事物,但它只能使用空格或字符(不是字符串或模式)作爲分隔符。

回答

6

AWK是格式化輸出一個更好的工具:

awk -F 'asdf gh' '{printf "%-15s%-10s%-10s\n", $1, FS, $2}' file 
lorem ipsum asdf gh 12345  
hello, world! asdf gh this is a test 
ee    asdf gh ii  

您可以printf更改號碼,更多的定製。

1

除非你想用awk,有兩個問題,你可以沿着線做:

sed 's/asdf gh/%&/g' <my-file | column -t -s'%' 

假設「%」是不以其他方式出現在你的文字一個有效分隔符。

3

在AWK使用printf函數

awk '{printf "%-20s%s\t%s\n",$1,FS,$2}' FS="asdf gh" file 

lorem ipsum   asdf gh 12345 
hello, world!  asdf gh this is a test 
ee     asdf gh ii 
相關問題