通过制表符分隔文件中多列的下划线自定义排序和删除双引号连接

bio*_*orm 2 grep awk python text-processing csv




当我使用下面的命令时 ,基于主题列顺序的自定义排序应该是数学、英语、科学

awk -F',' '{if (NR!=1) {print $2,$3,$5,$4}}' myfile.csv
Run Code Online (Sandbox Code Playgroud)

在我的myfile.csv 上我是这样的,但我想要其他方式

"101"    "Anna"    "Maths"    "V"
"102"    "Bob"    "Maths"    "V"
"103"    "Charles"    "Science"    "VI"
"104"    "Darwin"    "Science"    "VI"
"105"    "Eva"    "English"    "VII"
Run Code Online (Sandbox Code Playgroud)

基于主题列顺序的排序应该是数学、英语、科学
删除双引号并用下划线
这样连接

101_Anna_Maths_V
102_Bob_Maths_V
105_Eva_English_VII
103_Charles_Science_VI
104_Darwin_Science_VI
Run Code Online (Sandbox Code Playgroud)

原始文件:输出 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
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 6

您的原始命令:

awk -F',' '{if (NR!=1) {print $2,$3,$5,$4}}' myfile.csv
Run Code Online (Sandbox Code Playgroud)

您以惯用awk方式编写的命令:

awk -F',' 'NR > 1 { print $2, $3, $5, $4 }' myfile.csv
Run Code Online (Sandbox Code Playgroud)

上面的命令,修改为删除每行输入的所有双引号,其中NR > 1

awk -F',' 'NR > 1 { gsub(/"/, ""); print $2, $3, $5, $4 }' myfile.csv
Run Code Online (Sandbox Code Playgroud)

上面的命令,修改为使用_作为输出字段分隔符 ( OFS)的输出:

awk -F',' -vOFS='_' 'NR > 1 { gsub(/"/, ""); print $2, $3, $5, $4 }' myfile.csv
Run Code Online (Sandbox Code Playgroud)

  • 喜欢逐步发现答案! (2认同)