아래와 같이 CSV 파일이 있습니다.
input.csv
1,2,3
4,5,6,7,8
9,10,11,12
이제부터 하고싶다
output.csv
3
8
12
특정 고정 크기 열에 사용할 수 있다는 것을 알고 있습니다.
cut -d \, -f 1 >output.csv
이 바는 위치가 다양해서 못찾겠어요. 도움을 주셔서 감사합니다. 미리 감사드립니다.
답변1
한 가지 해결책은 다음과 같습니다.
awk -F "," '{print $NF}' input.csv > output.csv
답변2
awk -F, '{print $NF}'
이미 주어진 것처럼 이 경우에 가장 적합합니다.
다른 방법:
행을 뒤집고 첫 번째 열을 가져온 다음 다시 뒤집을 수 있습니다.
$ rev input.csv | cut -d, -f1 | rev
3
8
12
사용sed
$ sed 's/.*,\(.*\)/\1/' input.csv
3
8
12
사용 grep
및pcre
$ grep -oP '.*,\K.*' input.csv
3
8
12
답변3
마지막 필드 자체에 쉼표가 포함된 경우 실제로 CSV 파일을 구문 분석할 수 있는 것을 사용하는 것이 좋습니다.
13,14,15,"this, here"
마지막 필드는 this, here
, 가 아닙니다.here"
저는 Python을 사용하겠습니다. 스크립트에 넣거나 명령줄에서 스크립트를 가짜로 만들 수 있습니다.
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
답변4
문제의 CSV 데이터는 특이한 CSV 파일(헤더가 없고 레코드당 필드 수가 다름)이므로 헤더를 포함하여 5개 필드가 있는 보다 일반적인 CSV 파일을 사용하기로 선택했습니다.
$ mlr --icsv --omd cat file
처음 | 2위 | 세 번째 장소 | 4위 | 다섯 번째 장소 |
---|---|---|---|---|
1 | 2 | 삼 | 4 | 5 |
쉼표가 있는 필드 | 두번째 | 씨 | 디 | 두번째 |
6 | 7 | 8 | 9 | 0x0A |
ㅏ | 두번째 | 씨 | 디 | 안녕하세요 세계 |
1st,2nd,3rd,4th,5th
1,2,3,4,5
"field with, comma",B,C,D,E
6,7,8,9,0x0A
A,B,C,D,"Hello, world"
다음과 같이 이름으로 마지막 열을 추출할 수 있습니다.
$ mlr --csv cut -f '5th' file
5th
5
E
0x0A
Hello, world
...또는 아래와 같이 필드 번호로:
$ mlr --csv -N cut -f 5 file
5th
5
E
0x0A
Hello, world
...또는 마지막 필드를 선택하여 원하는 필드를 선택하세요.
$ mlr --csv -N put -q 'print $[NF]' file
5th
5
E
10
Hello, world
-N
위의 마지막 두 명령의 옵션에 유의하세요 . 이는 mlr
데이터를 헤더 없는 CSV 파일로 읽도록 지시합니다. 이를 통해 이름 대신 숫자로 필드를 참조할 수 있습니다.
분명히 문제의 것과 같은 불규칙한 CSV 파일을 계속 사용할 수 있습니다. mlr
입력이 "불규칙"하다고 알려 주기만 하면 됩니다 .
$ mlr --csv --ragged -N put -q 'print $[NF]' file
3
8
12