CSV의 첫 번째 요소와 마지막 요소 잘라내기

CSV의 첫 번째 요소와 마지막 요소 잘라내기

아래와 같이 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

노트

  • -rERE를 사용하세요
  • \}단어{
  • ([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}'

관련 정보