예시 데이터:
"Monday","12345","Friday"
위 파일에서 12345와 Friday 사이에 새 열을 추가하고 싶습니다.
어떻게 해야 하나요?
답변1
일부 무거운 도구(예: sed
또는 awk
)를 포함하지 않는 경우:
paste -d',' <(cut -d',' -f-2 file) column.file <(cut -d',' -f3- file)
여기서는 추가하려는 열이 이미 파일에 저장되어 있다고 가정합니다 column.file
.
답변2
데이터가 표시된 것처럼 간단하다고 가정하면 다음을 수행할 수 있습니다.
awk -F, -v OFS=, '{k=$3; $3="\"new text\""; $4=k}1' file
또는,
perl -F, -lane 's/$F[1]/$F[1],"new text"/; print' file
그러나 다음과 같이 중첩된 쉼표가 포함될 수 있는 데이터에는 실패합니다.
"foo", "bar,baz", "bar"
위의 파일은 유효한 csv 파일이지만 이러한 솔루션에서는 3개가 아닌 4개의 필드가 있는 것으로 처리합니다. 데이터에 유사한 상황이 포함될 수 있는 경우 적절한 csv 파서를 사용해야 합니다.
답변3
방금 같은 문제가 있었지만 빈 필드를 원했기 때문에 잘라내기/붙여넣기 답변이 제대로 작동하지 않았으므로 다음과 같이 작동했습니다.
삽입할 파일에 몇 줄이 있는지 확인하세요.
wc -l file.csv
1.
30이 주어졌다고 가정 하고 bash 루프를 사용하여 필드 3과 4 사이에 빈 필드를 삽입합니다.paste -d, <(cut -d, -f-3 file.csv) <(for i in `seq 1 30`; do echo; done) <(cut -d, -f4- file.csv) > fileNew.csv