주제 열 순서에 따른 맞춤 정렬은 수학, 영어, 과학이어야 합니다.
다음 명령을 사용할 때
awk -F',' '{if (NR!=1) {print $2,$3,$5,$4}}' myfile.csv
내myfile.csv이렇게 됐는데 다른 걸 원했어
"101" "Anna" "Maths" "V"
"102" "Bob" "Maths" "V"
"103" "Charles" "Science" "VI"
"104" "Darwin" "Science" "VI"
"105" "Eva" "English" "VII"
과목 열 순서에 따라 정렬은 수학, 영어, 과학이어야 합니다.
아래와 같이 큰따옴표를 제거하고 밑줄로 연결합니다.
101_Anna_Maths_V
102_Bob_Maths_V
105_Eva_English_VII
103_Charles_Science_VI
104_Darwin_Science_VI
원본 파일: 출력cat myfile.csv
Sl.No,RollNo,Names,Class,Subject
1,101,Anna,V,Maths
2,102,Bob,V,Maths
3,103,Charles,VI,Science
4,104,Darwin,VI,Science
5,105,Eva,VII,English
답변1
원래 명령은 다음과 같습니다.
awk -F',' '{if (NR!=1) {print $2,$3,$5,$4}}' myfile.csv
귀하의 명령은 awk
관용적으로 작성되었습니다.
awk -F',' 'NR > 1 { print $2, $3, $5, $4 }' myfile.csv
각 입력 줄에서 큰따옴표를 모두 제거하려면 위 명령을 수정하세요 NR > 1
.
awk -F',' 'NR > 1 { gsub(/"/, ""); print $2, $3, $5, $4 }' myfile.csv
위 명령은 _
출력 필드 구분 기호( OFS
)를 사용하여 출력하도록 수정되었습니다.
awk -F',' -vOFS='_' 'NR > 1 { gsub(/"/, ""); print $2, $3, $5, $4 }' myfile.csv
답변2
질문이 수정되었으므로 sed
주어진 입력에 대해 다음 솔루션을 사용하여 다음을 얻으십시오.
- 슬라이딩 필드 #4 및 #5
- 첫 번째 필드 삭제
- 쉼표를 밑줄로 바꾸기
- 첫 번째 줄을 제목으로 건너뛰기
sed -r '2,$s/^[^,]*,// ; 2,$s/^([^,]*,[^,]*)(,[^,]*)(.*)/\1\3\2/ ; 2,$s/,/_/g'
사용 sed
.
sed 's/"//g;s/[[:space:]]\+/_/g;/^$/d' infile
s/"//g
그러면 모든 따옴표가 제거됩니다"
.[[:space:]]\+
이는 하나 이상의 공백을 단일 밑줄로 대체합니다_
./^$/d
이렇게 하면 빈 줄이 제거됩니다. 빈 줄이 없으면 명령에서 제거할 수 있습니다. 또는/^[[:space:]]*$/d
공백/탭/빈 줄만 제거하도록 변경하세요.
구현이 이를 지원하지 않는 경우 \+
동등한 표준으로 대체하십시오.\{1,\}
sed
답변3
암소 비슷한 일종의 영양앗쉼표로 구분된 입력 파일에 대한 솔루션(귀하의 의견에 따름 -F','
):
awk -v FPAT='[^",[:space:]]+' 'NR>1{ for(i=1;i<=NF;i++) printf "%s%s",$i,(i<NF)?OFS:ORS }' OFS='_' myfile.csv
산출:
01_Anna_Maths_V
102_Bob_Maths_V
103_Charles_Science_VI
104_Darwin_Science_VI
105_Eva_Maths_VII