O que constitui um 'campo' para o comando cut?

O que constitui um 'campo' para o comando cut?

Por exemplo, o cutcomando pode receber um parâmetro -f, que de acordo comman

selecione apenas esses campos; também imprima qualquer linha que não contenha nenhum caractere delimitador, a menos que a opção -s seja especificada

Neste contexto, o que é um campo?

Responder1

O termo "campo" é frequentemente associado a ferramentas como cute awk. Um campo seria semelhante a uma coluna de dados, se você pegar os dados e separá-los usando um caractere específico. Normalmente, o caractere usado para fazer isso é um Space.

No entanto, como acontece com a maioria das ferramentas, é configurável. Por exemplo:

  • awk = awk -F"," ...- seria separado por vírgulas (ou seja ,,).
  • cut = cut -d"," ...- seria separado por vírgulas (ou seja ,,).

Exemplos

Este primeiro mostra como awkserá automaticamente dividido em espaços.

$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.

Este mostra como cutserá dividido em espaços também.

$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.

Aqui temos uma lista CSV de dados de coluna que estamos usando cutpara retornar as colunas 1 e 4.

$ echo "col1,col2,col3,co4" | cut -d"," -f1,4
col1,co4

Awk também pode fazer isso:

$ echo "col1,col2,col3,co4" | awk -F"," '{print $1","$4}'
col1,co4

Awk também é um pouco mais hábil em lidar com uma variedade de personagens de separação. Aqui está lidando Tabscom Spacesonde eles são misturados ao mesmo tempo:

$ echo -e "The\t rain\t\t in Spain." | awk '{print $1" "$4}'
The Spain.

E a opção -s para cortar?

Com relação a essa opção, basta dizer cutpara não imprimir nenhuma linha que não contenha o caractere delimitador especificado por meio da -dopção.

Exemplo

Digamos que tivéssemos esse arquivo.

$ cat sample.txt 
This is a space string.
This is a space   and   tab string.
Thisstringcontainsneither.

OBSERVAÇÃO:Existem espaços e tabulações na segunda string acima.

Agora, quando processamos essas strings usando cutcom e sem o -sswitch:

$ cut -d" " -f1-6 sample.txt 
This is a space string.
This is a space  
Thisstringcontainsneither.

$ cut -d" " -f1-6 -s sample.txt 
This is a space string.
This is a space  

No segundo exemplo, você pode ver que a -sopção omitiu quaisquer strings da saída que não contenham o delimitador, Space.

Responder2

Um campo de acordo com POSIX é qualquer parte de uma linha delimitada por qualquer um dos caracteres emIFS, o "separador de campo de entrada(ouseparador de campo interno)." O valor padrão é espaço, seguido por uma tabulação horizontal, seguida por uma nova linha. Com o Bash você pode executar printf '%q\n' "$IFS"para ver seu valor.

Responder3

Depende do utilitário em questão, mas para cut, um "campo" começa no início de uma linha de texto e inclui tudo até a primeira aba. O segundo campo vai do caractere após a primeira aba até a próxima aba. E assim por diante para o terceiro, quarto, ... Tudo entre tabulações, ou entre início de linha e tabulação, ou entre tabulação e fim de linha.

A menos que você especifique um delimitador de campo com a opção "-d": cut -d: -f2obteria tudo entre o primeiro e o segundo caracteres de dois pontos (':').

Outros utilitários têm definições diferentes, mas um caractere de tabulação é comum. awké uma boa alternativa se cutfor muito rigoroso, pois awkdivide os campos com base em um ou mais caracteres de espaço em branco. Isso é um pouco mais natural em muitas situações, mas você precisa conhecer um pouco de sintaxe. Para imprimir o segundo campo de acordo com awk:

awk '{print $2}'

sorté quem me engana. Minha página de manual atual sortdiz algo como "transição de não-branco para branco" para um separador de campo. Por alguma razão, são necessárias algumas tentativas para sortdefinir os campos corretamente. joinaparentemente usa campos "delimitados por espaços em branco", que é o que awkpretende fazer por padrão.

A moral da história é ter cuidado e experimentar se não souber.

Responder4

Quando você usa cuto comando, são necessários dois argumentos principais

-d: que significa delimitador

-f: que significa campo a ser cortado do arquivo de entrada

Ex. cut - d "|"  - f1, 2 input_filename

Aqui o outputseria separado pelo delimitador "|" e cortará apenas 2 campos do arquivo de entrada

Se você tiver as seguintes linhas em seu arquivo

Alex|120000|Admin|1999

Então ele cortará 2 campos que são

Alex|120000

informação relacionada