Meu arquivo de texto não possui delimitador para especificar apenas espaços separadores. Como recortar a coluna 2 para o arquivo de saída,
39 207 City and County of San Francisc REJECTED MAT = 0
78 412 Cases and materials on corporat REJECTED MAT = 0
82 431 The preparation of contracts an REJECTED MAT = 0
Então a saída que eu preciso é
207
412
432
fonte
cat ... |
é raramente necessária. A maioria dos comandos do Unix, comocut
um ou mais arquivos de entrada como argumentos, por exemplocut -d" " -f5 columns.txt
.como @jimmij disse,
awk '{print $2}' file
é a resposta mais simples.Se, por algum motivo, você não quiser usar
awk
e insistir em usá-cut
lo, poderásed
converter todas as instâncias de dois ou mais espaços em uma única guia (cut
delimitador padrão da impressora) antes de canalizar para o corte:fonte
Você ainda pode usar espaços únicos como seu delimitador, apenas terá mais colunas. Aumente o valor atribuído
cut -d' ' -f
de 2 para 5, ou talvez 6. Aumente o número até obter os resultados desejados.fonte
Acima, é muito útil quando utilitários Linux como o awk para extração de dados não funcionam se você estiver mudando para o usuário "root" dentro de um shell script, como abaixo:
fonte
awk
não funcionar" no seu exemplo é que o documento aqui não está entre aspas, o que significa que$2
ele seria expandido pelo shell para o segundo parâmetro posicional. A solução provavelmente não é alternar para umgrep
comando, mas escapar do$
in$2
as\$2
ou simplesmente citar todo o documento usando<<'EOF'
no lugar de<<EOF
. Observe também que a tarefa no seu exemplo é mais simplesmente executada porpgrep
.