说我在这样的文件中有一些文字:
lorem ipsum asdf gh 12345
hello, world! asdf gh this is a test
ee asdf gh ii
请注意,每行包含“asdf gh”。我希望能够使用一些shell命令来根据该分隔符字符串对齐该文本,所以我可以这样做:
$ 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
可以列出事物,但它只能使用空格或字符(不是字符串或模式)作为分隔符。
答案 0 :(得分: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 :(得分: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
答案 2 :(得分:1)
除非您想使用awk并且有两个问题,否则您可以按照以下方式执行:
sed 's/asdf gh/%&/g' <my-file | column -t -s'%'
假设&#39;%&#39;是一个有效的分隔符,不会出现在您的文本中。