여러 줄을 한 줄로 연결하고 csv 출력 파일에 추가합니다.

여러 줄을 한 줄로 연결하고 csv 출력 파일에 추가합니다.

쉼표로 구분된 파일이 여러 개 있고 먼저 줄을 하나로 병합한 다음 해당 줄을 output.csv 파일에 추가할 수 있습니다.

파일 1.txt:

CV-1999-0001,
CV-1999-0002,
CV-1999-0003,
CV-1999-0004,
CV-1999-0005,
  ...

파일 2.txt:

CV-2000-0006,
CV-2000-0007,
CV-2000-0008,
....

출력.csv:

IDs
CV-1999-0001,CV-1999-0002,CV-1999-0003,CV-1999-0004,CV-1999-0005
CV-2000-0006,CV-2000-0007,CV-2000-0008,CV-2000-0009,CV-2000-0010

나는 이것을 시도했지만 아무것도 내가 필요한 것을 수행하지 못하는 것 같습니다. 여전히 여러 행이 표시됩니다.

echo $(cat /Users/...../"$ROWS".txt) | sed 's/ //g' > "$ROWS_new".txt


echo $(cat paste -s -d "" files-1.txt) | sed 's/ //g' >> output.csv

답변1

GNU awk를 사용하여 다중 문자 RS를 ​​수행하고 각 파일을 메모리로 읽습니다.

$ awk -v RS='^$' -F',\n' -v OFS=',' '{$1=$1}1' file-1.txt file-2.txt
CV-1999-0001,CV-1999-0002,CV-1999-0003,CV-1999-0004,CV-1999-0005,
CV-2000-0006,CV-2000-0007,CV-2000-0008,

또는 다중 문자 RS 및 ENDFILE에 GNU awk를 사용하여 한 번에 한 줄씩 읽습니다.

$ awk -v RS=',\n' -v ORS=',' '1; ENDFILE{printf "\n"}' file-1.txt file-2.txt
CV-1999-0001,CV-1999-0002,CV-1999-0003,CV-1999-0004,CV-1999-0005,
CV-2000-0006,CV-2000-0007,CV-2000-0008,

또는 한 번에 한 줄씩 읽으려면 awk를 사용하십시오.

$ awk '
    FNR==1 { printf "%s%s", prev, ors; ors=ORS }
    FNR>1  { printf "%s", prev }
    { prev=$0 }
    END { print prev }
' file-1.txt file-2.txt
CV-1999-0001,CV-1999-0002,CV-1999-0003,CV-1999-0004,CV-1999-0005,
CV-2000-0006,CV-2000-0007,CV-2000-0008,

입력 파일의 마지막 줄이 s로 끝나면 ,쉽게 제거할 수 있지만, 질문의 예제 입력이 s로 끝나기 때문에 ...입력 파일이 실제로 s로 끝나는지 알 수 없으므로 ,그대로 두겠습니다. 운동으로.

답변2

한번 시도해 보세요:

for ROW in ${ROWS}; do
    tr -d "\n" < "/Users/...../${ROW}.txt" \
    | sed -e 's/,$//'
done >> "output.txt"

답변3

sed제공 -z( ) 옵션을 사용하여 --null-data; separate lines by NUL characters전체 입력 스트림을 읽으십시오.

sed -z 's/\n//g; s/\r/\n/' file1 <(echo $'\r') file2
CV-1999-0001,CV-1999-0002,CV-1999-0003,CV-1999-0004,CV-1999-0005,
CV-2000-0006,CV-2000-0007,CV-2000-0008,

해당 옵션을 사용할 수 없는 경우 시도해 보세요.

sed -f chabo.sed  file1 <(echo $'\r') file2
CV-1999-0001,CV-1999-0002,CV-1999-0003,CV-1999-0004,CV-1999-0005,
CV-2000-0006,CV-2000-0007,CV-2000-0008,

chabo.sed와 함께 존재합니다

:L
N
$!bL
s/\n//g
s/^M/\  
/

및 ( ) ^M문자.<cr>0x0D

답변4

이 솔루션에 어떤 문제가 있나요?

╰─ → $ paste -sd " " file1.txt file2.txt
CV-1999-0001, CV-1999-0002, CV-1999-0003, CV-1999-0004, CV-1999-0005,
CV-2000-0006, CV-2000-0007, CV-2000-0008,

관련 정보