Text-Processing

通過製表符分隔文件中多列的下劃線自定義排序和刪除雙引號連接

  • October 9, 2017

當我使用以下命令時 ,基於主題列順序的自定義排序應該是數學、英語、科學

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

您的原始命令:

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

引用自:https://unix.stackexchange.com/questions/396654