Criando if / than statement para mover arquivos para outro local com base no valor de 1 coluna?

1

Tenho milhares de arquivos de texto em xyz (latitude, longitude e elevação) que desejo separar por latitude ou longitude. Como e quais comandos eu poderia usar para criar um "if latitude (column1) é maior que -1.00, do que mover para este diretório"? para todos os arquivos no meu diretório original.

Eu estive perto com alguns comandos diferentes usando grep ou awk, mas não trabalhando exatamente como gostaria.

exemplo de lista de arquivos

2004_2006-361383_Morecambe_Bay_Heysham_Channel_s.xyz
2004_2006-361385_River_Mersey_Langton_Dock_Entrance_s.xyz
2004_2006-361399_Thames_Estuary_Gore_Channel_s.xyz

aqui está uma amostra das primeiras 10 linhas de um arquivo, muitos desses arquivos têm milhões e milhões de linhas

-002.9584650 54.0087979 -5.3
-002.9416586 54.0326371 -1.3
-002.9307806 54.0323594 -8.5
-002.9644657 53.9985145 0.8
-002.9680185 54.0019534 -10
-002.9524820 54.0183868 -5
-002.9439942 54.0179227 -4.2
-002.9569578 54.0183595 -5.4
-002.9372192 54.0224494 -3.2
-002.9535454 54.0178188 -4.3
    
por lbeazy 05.04.2016 / 17:05

1 resposta

0

Se o arquivo não tiver um nome engraçado (ou seja, espaço)

classificação global

awk 'FNR==1 { printf "mv %s ../dir%d\n",FILENAME,$1 ; next ; }' * | bash

norte / sul classificar

awk 'FNR==1 { printf "mv %s ../%s\n",FILENAME,$1<0?"south":"north" ; next ; }' * | bash

onde

  • FNR == 1 operam na primeira linha do arquivo
  • printf e %d serão resolvidos para int parte da coluna 1
  • substitua | bash por | head -10 para verificar se está tudo bem
  • next irá pular a linha restante para o próximo arquivo.
  • $1<0?"south":"north" selecionará o sul ou o norte

Eu suponho que você queira mover o arquivo inteiro e que toda a latitude esteja acima ou abaixo de 0.

    
por 05.04.2016 / 17:27

Tags