Células de referência na coluna de .csv da linha de comando


0

Eu tenho uma coluna B em my.csv em que cada célula faz referência ao nome do arquivo de um documento em um diretório source_directory/.

Eu gostaria de pegar cada um desses nomes para que eu possa usá-los como args para outros comandos shell (como cp ).

Idealmente substitua list.txt a seguir, com o conteúdo da coluna B em my.csv

cp $(<list.txt) target_directory

Respostas:


1

Que tal agora:

for i in `awk -F, '{print $2}' my.csv`; do cp "$i" target_directory; done

O comando awk é a chave; o -F, diz para usar uma vírgula como um separador de campo e, em seguida, pode imprimir o segundo campo.

Para pular a primeira linha:

for i in `awk -F, 'NR==1{next} {print $2}' my.csv`; do cp "$i" target_directory; done

Obrigado, tentando testar isso com for i in `awk -F, '{print $2}' my.csv`; do echo $1; done mas apenas recebendo linhas em branco como saída. Quaisquer pensamentos que eu possa estar fazendo errado?
Meltemi

Isso deve ser eco $ i não ecoar $ 1 no final; a parte "para $ i" no início configura a variável de shell i como sendo cada nome de arquivo por vez.
nickcrabtree

Você sabe como pular a linha de cabeçalho para que ela não seja incluída? Infelizmente, o título da minha linha de cabeçalho tem 2 espaços, o que significa as 3 primeiras linhas de $i
Meltemi

Além disso, correndo para o problema que você mencionou com espaços; precisa de uma solução alternativa que funcione com Macs…
Meltemi

0

Se você souber o número da coluna, tente:

cut -d, -f2 my.csv | {while read filename; do cp "$filename" target_dir/ ; done}

Pressupõe que você deseja a coluna nº 2 e não há vírgulas em cadeias de caracteres entre aspas que precisem ser ignoradas.


Existem vírgulas na coluna 1, que estão criando problemas com a solução @ nickcrabtree.
Meltemi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.