A página de manual do column
comando descreve a -s
opção assim:
-s, --separator separators
Specify the possible input item delimiters (default is whitespace).
Ele diz que por padrão, -s
é whitespace . Fiz alguns testes:
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7 / xfs defaults 0 0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be /boot xfs defaults 0 0
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e none swap defaults 0 0
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab | column -t
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7 / xfs defaults 0 0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be /boot xfs defaults 0 0
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e none swap defaults 0 0
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|"
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7|/ |xfs |defaults|0|0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be|/boot|xfs |defaults|0|0
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e|none |swap|defaults|0|0
[root@192 ~]#
Se eu adicionar o "valor padrão" de -s
, obtive isso:
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|" -s " "
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7|/ ||||||||||||||||||| | |||xfs| ||||defaults|||| | |||0|0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be|/boot|||||||||||||||||||xfs| ||| |defaults|||| ||||0|0||| |
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e|none ||||||||||||||||||| |swap||| |defaults|||| ||||0|0||| |
[root@192 ~]#
Porque isto é assim? Eu esperava que produzisse o mesmo resultado que o awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|"
. Eu também tentei dar -s
valores como [:space:]+
, [[:space:]]+
, \s+
, +
, mas todos falharam em produzir o resultado que produziu por awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|"
.
Minha pergunta é, se eu tiver que especificar manualmente o valor de -s
, qual valor devo dar para que ele produza o mesmo resultado que awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|"
? Basicamente, por favor me ajude a preencher o espaço em branco:
[root@192 ~]# awk 'substr($0,1,1)=="U"' /etc/fstab | column -to"|" -s <fill_your_answer_here>
UUID=75278d9c-4f90-4597-93d9-471186f5c1e7|/ |xfs |defaults|0|0
UUID=8d7fa4f2-9852-41d7-9bf7-5f578895a5be|/boot|xfs |defaults|0|0
UUID=11c7f961-4859-46e9-aa60-8110cf01ee0e|none |swap|defaults|0|0
[root@192 ~]#
-s " "
define o separador de entrada para um caractere, o espaço.O valor padrão é whitespace , que não é um caractere, é o conjunto dos caracteres em branco (podemos chamá-lo de metacaractere). Também uma sequência de caracteres de espaço em branco é considerada como um separador.
Assim, sem
-s
, durante o comportamento padrão, tabulações, espaços ou uma série deles entre palavras, são considerados como um separador. Mas ao usar-s " "
, mesmo dois espaços juntos são considerados dois separadores com um campo vazio entre eles.A partir daqui : Espaço em branco — é uma tabulação, nova linha, tabulação vertical, alimentação de formulário, retorno de carro ou espaço. O Bash usa espaços em branco para determinar onde as palavras começam e terminam.
Você não pode imitar o comportamento padrão definindo
-s
uma lista de caracteres, uma sequência de caracteres de espaço em branco seria considerada como muitos separadores, não um.Também
-t
para impressão bonita, produz uma saída semelhante a tabulação, que não contém tabulações, mas apenas espaços.