CSV 파일의 단일 열을 여러 열로 분할하는 방법

CSV 파일의 단일 열을 여러 열로 분할하는 방법

내 csv 파일에 다음 텍스트가 있고 csv 파일의 별도 열에 FILE 및 TIMESTAMP를 넣어야 합니다. 이를 달성하는 방법을 알려주십시오.

FILE, TIMESTAMP
/u01/app/xxcus/12.0.0/mds/cvs/oracle/apps/xxcus/receipt/server/XxReceipt.java, Thu 28 Jun 2018 02:49:45 AM EDT
/u01/app/xxcus/12.0.0/mds/cvs/oracle/apps/xxcus/receipt/webui/XxReceiptCreateCO.java, Thu 28 Jun 2018 09:00:43 AM EDT
/u01/app/xxcus/12.0.0/mds/cvs/oracle/apps/xxcus/receipt/webui/XxOlympusReceiptPG.xml, Thu 28 Jun 2018 05:16:46 AM EDT
/u01/app/xxcus/12.0.0/reports/US/XX_POXRCPPV.rdf, Thu 28 Jun 2018 12:31:29 PM EDT
/u01/app/xxcus/12.0.0/reports/US/XX_POXRCIPS.rdf, Thu 28 Jun 2018 12:31:40 PM EDT

참고: list 명령을 시도했지만 도움이 되지 않았습니다.

답변1

sed도로

,␣쉼표 공백( )을 파일의 테이블로 바꾸 려면 sed를 통해 해당 내용을 파이프할 수 있습니다. 이것은 예이다

$ echo '/apps/XxReceipt.java, Thu 28 Jun 2018 02:49:45 AM EDT' | sed 's:, :\t:g'
/apps/XxReceipt.java    Thu 28 Jun 2018 02:49:45 AM EDT

설명하다:

  • 주위에 있는 간단한 따옴표는 s:, :\t:gsed에 문자열을 단일 인수로 제공하도록 쉘에 지시합니다.
  • sed의 경우 s첫 번째 위치는 교체를 의미합니다.
  • :패턴/대체 구분 기호입니다.
  • ,␣어울리는 패턴이에요
  • \t패턴 대체입니다 - 테이블의 이스케이프 시퀀스
  • g(전역)은 sed에게 첫 번째 줄뿐만 아니라 해당 줄의 모든 항목을 바꾸라고 지시합니다.

-Esed를 사용하여 더 복잡한 패턴을 일치시켜야 하는 경우 패턴이 정규식으로 해석되도록 스위치를 사용할 수 있습니다 . 각 표현식에 접두사를 추가하면 여러 sed 표현식을 연결할 수 있습니다 -e.

csv 데이터가 파일에 있는 경우 sed를 통해 파이프하는 방법은 다음과 같습니다.

cat my-data.csv | sed 's:, :\t:g' | tee my-data.tsv

또는

cat my-data.csv | sed 's:, :\t:g' > my-data.tsv

답변2

내가 질문을 읽는 방식은 당신이 원하는 것입니다만들다주어진 파일 목록을 CSV 형식으로 출력합니다.다른 설명은 이 답변의 끝을 참조하세요.

다음은 이를 수행할 수 있는 쉘 스크립트입니다. Linux 버전을 사용하여 stat마지막으로 수정된 타임스탬프를 가져옵니다.

#!/bin/sh

echo "PATHNAME,TIMESTAMP"
stat -c '"%n",%y' "$@"

헤더를 출력한 후 이 스크립트는 명령줄에 언급된 경로 이름을 호출하여 마지막으로 수정된 타임스탬프를 가져옵니다 . 이를 변경하는 방법을 알아보려면 stat시스템 설명서를 참조하세요 . stat경로 이름(따옴표 포함)과 타임스탬프를 인쇄합니다.

다음과 같이 사용할 수 있습니다.

sh script.sh PATTERN >outputfile

예를 들어:

$ sh script.sh *.log* *.tar >file.cvs

$ cat file.cvs
PATHNAME,TIMESTAMP
"dsmerror.log",2018-07-17 13:00:02.911711652 +0200
"dsminstr.log",2018-07-17 13:00:04.079726608 +0200
"dsminstr.log.bak",2018-05-13 18:00:03.231791181 +0200
"dsminstr.log.lock",2018-07-17 13:00:04.079726608 +0200
"archive_20170823-old.tar",2017-08-22 16:44:23.037803149 +0200
"archive_20170823.tar",2017-08-23 09:35:28.956158119 +0200
"archive_20180409.tar",2018-04-09 09:47:29.472374428 +0200
"archive-chr22.tar",2018-06-19 14:50:45.896447161 +0200
"gene_cache.tar",2018-04-25 09:44:15.518486626 +0200

스크립트가 매우 짧기 때문에 해당 명령을 명령줄에 직접 작성할 수 있습니다. 위의 예와 동일한 명령줄은 다음과 같습니다.

$ { echo "PATHNAME.TIMESTAMP"; stat -c '"%n",%y' *.log* *.tar; } >file.cvs

이제 이 파일이 있으면 보고 목적에 맞게 형식을 적절하게 지정할 수 있습니다.

$ column -s, -t file.csv
PATHNAME                    TIMESTAMP
"dsmerror.log"              2018-07-17 13:00:02.911711652 +0200
"dsminstr.log"              2018-07-17 13:00:04.079726608 +0200
"dsminstr.log.bak"          2018-05-13 18:00:03.231791181 +0200
"dsminstr.log.lock"         2018-07-17 13:00:04.079726608 +0200
"archive_20170823-old.tar"  2017-08-22 16:44:23.037803149 +0200
"archive_20170823.tar"      2017-08-23 09:35:28.956158119 +0200
"archive_20180409.tar"      2018-04-09 09:47:29.472374428 +0200
"archive-chr22.tar"         2018-06-19 14:50:45.896447161 +0200
"gene_cache.tar"            2018-04-25 09:44:15.518486626 +0200

이 방법은 경로 이름에 쉼표가 포함되어 있지 않으면 작동합니다.

쉼표가 포함된 경로 이름도 처리할 수 있는 CSV 파서를 사용하여 형식을 올바르게 지정하려면 다음을 수행하세요.

$ csvlook file.csv
| PATHNAME                 | TIMESTAMP                           |
| ------------------------ | ----------------------------------- |
| dsmerror.log             | 2018-07-17 13:00:02.911711652 +0200 |
| dsminstr.log             | 2018-07-17 13:00:04.079726608 +0200 |
| dsminstr.log.bak         | 2018-05-13 18:00:03.231791181 +0200 |
| dsminstr.log.lock        | 2018-07-17 13:00:04.079726608 +0200 |
| archive_20170823-old.tar | 2017-08-22 16:44:23.037803149 +0200 |
| archive_20170823.tar     | 2017-08-23 09:35:28.956158119 +0200 |
| archive_20180409.tar     | 2018-04-09 09:47:29.472374428 +0200 |
| archive-chr22.tar        | 2018-06-19 14:50:45.896447161 +0200 |
| gene_cache.tar           | 2018-04-25 09:44:15.518486626 +0200 |

csvlook의 일부입니다csvkit, CSV 파일 처리를 위한 Python 툴킷입니다.

관련 정보