Uma solução é:
awk -F "," '{print $NF}' input.csv > output.csv
Eu tenho um arquivo CSV como abaixo
input.csv
1,2,3
4,5,6,7,8
9,10,11,12
A partir disso, quero obter
output.csv
3
8
12
Eu sei que para uma coluna de tamanho fixo particular, então eu posso usar
cut -d \, -f 1 >output.csv
Como a posição desta coluna varia, não consegui descobrir. Qualquer ajuda é apreciada. Obrigado antecipadamente.
Uma solução é:
awk -F "," '{print $NF}' input.csv > output.csv
awk -F, '{print $NF}'
é mais adequado neste caso, como já foi fornecido
Outras maneiras:
Você pode inverter as linhas, obter a primeira coluna e, em seguida, inverter novamente
$ rev input.csv | cut -d, -f1 | rev
3
8
12
Usando sed
$ sed 's/.*,\(.*\)//' input.csv
3
8
12
Usando grep
e pcre
$ grep -oP '.*,\K.*' input.csv
3
8
12
Eu recomendaria usar algo que possa realmente analisar arquivos CSV, caso o último campo contenha vírgulas, por exemplo,
13,14,15,"this, here"
O último campo é this, here
, não here"
Eu usaria python, que você poderia colocar em um script ou você poderia falsificar o script na linha de comando como
python <(cat <<EOSCRIPT
import sys
import csv
f = csv.reader(open(sys.argv[1]))
for row in f:
print row[-1]
EOSCRIPT
) input.csv > output.csv
Tags text-processing csv