아래와 같이 CSV 파일에 배열이 있습니다.
input.csv
"{1,2,3,4}"
"{1,2,3,4,5,6,7,8,9}"
"{34,6,7,89}"
이 CSV 파일의 첫 번째 요소와 마지막 요소를 다른 CSV 파일로 갖고 싶습니다.
output.csv
1,4
1,9
34,89
나는 전에 시도했다
cut -d , -f1 -- complement input.csv > output.csv
나는 이것이 일반적인 CSV에서 작동한다는 것을 알고 있습니다. 하지만 여기에는 중괄호와 ""도 있습니다.
답변1
난 이걸 할거야sed
$ sed -r 's/"\{([0-9]+,).*,([0-9]+)\}"/\1\2/' input
1,4
1,9
34,89
노트
-r
ERE를 사용하세요\}
단어{
([0-9]+,)
나중에 사용할 수 있도록 숫자 뒤에 쉼표를 붙여 저장하세요.\1\2
저장된 스키마에 대한 역방향 참조
(귀하의 출력은 들여쓰기되어 있으므로 원할 수도 / \1\2/
있고 /\t\1\2/
교체할 수도 있습니다. 원하는 대로 조정하십시오.)
답변2
일방 통행:
awk -F"[}{,]" '{print $2, $(NF-1)}' OFS=, file
중괄호를 구분 기호로 사용할 수도 있으므로 요소에 직접 액세스할 수 있습니다.
답변3
사용 sed
:
sed -e 's/,.*,/,/' -e 's/[^0-9,]//g' file
첫 번째 s
명령은 첫 번째와 마지막 쉼표 사이의 모든 것을 쉼표로 대체하여 그 사이의 모든 것을 효과적으로 제거합니다.
두 번째 s
명령은 숫자나 쉼표가 아닌 모든 문자를 제거합니다.
답변4
sed -r "s/(\"|\{|\})//g" input.csv|awk -F, '{print $1","$NF}'