bash方法从csv文件中删除最后4列

use*_*171 10 csv bash awk cut sed

有没有办法使用bash删除某些输入CSV文件的最后四列?最后四列可以包含从一行到另一行的长度不同的字段,因此仅从每行的末尾删除一定数量的字符是不够的.

pet*_*hes 17

如果所有行具有相同数量的字段,则剪切可以执行此操作,否则执行awk.

cut -d, -f1-6 # assuming 10 fields
Run Code Online (Sandbox Code Playgroud)

如果要控制输出seperater使用--output-delimiter = string,将打印出前6个字段

awk -F , -v OFS=, '{ for (i=1;i<=NF-4;i++){ printf $i, }; printf "\n"}'
Run Code Online (Sandbox Code Playgroud)

循环遍历多个字段-4的字段并将其打印出来.


Per*_*one 13

cat data.csv | rev | cut -d, -f-5 | rev
Run Code Online (Sandbox Code Playgroud)

rev 反转行,所以如果所有行都具有相同的列数并不重要,它将始终删除最后一行4.这仅在最后4列本身不包含任何逗号时才有效.

  • 在我看来,这是一个非常好的解决方案,使用rev的+1(我不知道它存在) (2认同)

Jar*_*edC 6

cut如果您知道列数,则可以使用此方法.例如,如果您的文件有9列,并且逗号是您的分隔符:

cut -d',' -f -5
Run Code Online (Sandbox Code Playgroud)

但是,这假定csv文件中的数据不包含任何逗号. cut将引号内的逗号解释为分隔符.


小智 5

awk -F, '{NF-=4; OFS=","; print}' file.csv
Run Code Online (Sandbox Code Playgroud)

或者

awk -F, -vOFS=, '{NF-=4;print}' file.csv
Run Code Online (Sandbox Code Playgroud)

将删除每行的最后4列。