나는입력.txt파일 형식은 다음과 같습니다.
Name age number address
mark 23 89756342192 chennai
david 40 70214789023 delhi
아래 예에 따라 TXT 파일에서 CSV 파일을 만들려면 어떻게 해야 합니까? 감사해요.
mark,23,89756342192,chennai
david,40,70214789023,delhi
아래는 제가 쓴 스크립트입니다
printrep.sh
#!/bin/sh
Headers=["Name","Age","Phone","Address"];
count=$(wc -l < $name)
i=0;
echo "Headers[0] + ' , ' +Headers[1]+ ' , ' +Headers[2] + ' , ' +Headers[3] + ' , ' +Headers[4]";
while [ $i -lt $count ]
do
read line | awk FS=' ' OFS="," '{print $0}'
i=`expr $i + 1`
done
위 코드는 출력을 표시하지 못합니다. 나는 무엇이 잘못되었는지 모른다. 도와주세요. 저는 쉘 스크립팅의 초보자입니다.
답변1
bash:IFS 변수가 여기서 핵심입니다. 이것은 bash 특정 배열 사용입니다.read -a
IFS=,
while IFS=$' \t' read -ra fields; do echo "${fields[*]}"; done < input.txt
awk: 매우 간결함: $1=$1
출력 필드 구분 기호를 사용하여 현재 줄을 다시 쓰고 1
해당 줄을 인쇄합니다.
awk '{$1=$1}1' OFS=, input.txt
밀러: 입력 파일이 필요합니다.아니요빈 행이 있습니다. "예쁜 인쇄" 형식에서 csv로 변환 중입니다.
mlr --p2c cat input.txt
또한 입력의 쉼표를 올바르게 처리합니다.
$ cat input.txt
Name age number address
mark 23 89756342192 chennai
david 40 70214789023 delhi
alice 24 42 paris,texas
$ mlr --p2c cat input.txt
Name,age,number,address
mark,23,89756342192,chennai
david,40,70214789023,delhi
alice,24,42,"paris,texas"
답변2
여러 가지 방법이 있습니다:
cut --output-delimiter="," -c1-6,7-11,12-25,26- < file
tr -s " " "," <file
sed -e "s/ */,/g" <file
답변3
sed -r -i 's/\s+/,/g' file.txt
output
cat file.txt
Name,age,number,address
mark,23,89756342192,chennai
david,40,70214789023,delhi