여러 CSV 파일의 각 줄에 대해 CSV 파일 내부의 파일 이름을 연결합니다.

여러 CSV 파일의 각 줄에 대해 CSV 파일 내부의 파일 이름을 연결합니다.

많은 CSV 파일이 있고 각 파일의 모든 줄에 각 특정 CSV 파일의 파일 이름이 필요합니다.

원본 파일 내용 abc123.csv:

ColVal_1;ColVal_2;ColVal_3
ColVal_4;ColVal_5;ColVal_6

새 파일 콘텐츠:

ColVal_1;ColVal_3;ColVal_3;abc123.csv
ColVal_4;ColVal_5;ColVal_6;abc123.csv

모든 CSV 파일은 동일한 디렉터리에 있습니다. 각 파일의 이름을 지정하고 싶지 않습니다.

답변1

sed및 를 사용하면 훨씬 더 간단하고 쉽고 빠릅니다 xargs. 여기서는 sed내부 편집을 사용하므로 추가 셸 도구가 필요하지 않습니다.

$ ls file{1..5}.txt|xargs -I% sed -i 's/$/;%/' %

그리고 여기에 출력이 있습니다.

$ cat file{1..5}.txt
ColVal_1;ColVal_2;ColVal_3;file1.txt
ColVal_4;ColVal_5;ColVal_6;file1.txt
ColVal_1;ColVal_2;ColVal_3;file2.txt
ColVal_4;ColVal_5;ColVal_6;file2.txt
ColVal_1;ColVal_2;ColVal_3;file3.txt
ColVal_4;ColVal_5;ColVal_6;file3.txt
ColVal_1;ColVal_2;ColVal_3;file4.txt
ColVal_4;ColVal_5;ColVal_6;file4.txt
ColVal_1;ColVal_2;ColVal_3;file5.txt
ColVal_4;ColVal_5;ColVal_6;file5.txt

답변2

당신을 사용하면 sed다음과 같은 일을 할 수 있습니다.

for f in *.csv
do
 sed -i 's/$/ '"$f"'/' "$f"
done

테스트

디렉토리 중 하나 안에 몇 개의 csv파일을 만들었습니다.

cat csv1.csv

this
is
first
csv
file

##Second CSV file

cat csv2.csv

this
is
second
csv
file

이제 위에서 언급한 명령을 실행했습니다. 명령을 실행한 후 파일은 아래와 같습니다.

cat csv1.csv

this csv1.csv
is csv1.csv
first csv1.csv
csv csv1.csv
file csv1.csv

##Second CSV file

cat csv2.csv

this csv2.csv
is csv2.csv
second csv2.csv
csv csv2.csv
file csv2.csv

네가 원한다면세미콜론sed파일 이름을 추가하기 전에 명령 에 추가하면 됩니다 . 아래와 같이 명령 을 변경합니다 sed.

 sed -i 's/$/ '";$f"'/' "$f"

참고자료

http://www.unix.com/unix-for-dummies-questions-and-answers/150545-merge-files-add-file-name-end-each-line.html

답변3

어때요:-

for i in *.csv; do awk '{print $0 ";" FILENAME }' $i > ${i}.tmp ; mv ${i}.tmp ${i} ; done

mv의 최신 버전이 있으면 피할 수 있지만 awk아마도 이식성이 더 좋을 것입니다.

답변4

와 함께 perl:

$ perl -i.bak -ple '$_ .= ";"$ARGV' file.csv 
ColVal_1;ColVal_2;ColVal_3;file.csv
ColVal_4;ColVal_5;ColVal_6;file.csv

에서 perldoc -v '$ARGV':

$ARGV   Contains the name of the current file when reading from "<>".

*.csv현재 디렉터리의 모든 파일을 처리하는 데 사용할 수 있습니다 . -i.bak옵션으로 모든 파일을 제자리에서 편집하고 이름이 인 백업 파일을 생성합니다 *.csv.bak.

관련 정보