我正在寻找一种相对简单的方法来将 CSV header 名称截断为给定的最大长度。例如这样的文件:
one,two,three,four,five,six,seven
data,more data,words,,,data,the end
可以将所有标题名称限制为最多 3 个字符并变为:
one,two,thr,fou,fiv,six,sev
data,more data,words,,,data,the end
要求:
- 只有第一行受到影响
- 我不知道标题是什么,所以它必须动态读写值和长度
我用 awk 和 sed 尝试了一些东西,但我都不精通。我找到的最接近的是这个片段:
csvcut -c 3 file.csv |
sed -r 's/^"|"$//g' |
awk -F';' -vOFS=';' '{ for (i=1; i<=NF; ++i) $i = substr($i, 0, 2) } { printf("\"%s\"\n", $0) }' >tmp-3rd
但它专注于列,而且感觉比使用 csvcut 所必需的更复杂。
感谢任何帮助。
最佳答案
使用 GNU sed:
sed -E '1s/([^,]{1,3})[^,]*/\1/g' file
输出:
one,two,thr,fou,fiv,six,sev data,more data,words,,,data,the end
参见:man sed
和 The Stack Overflow Regular Expressions FAQ
关于csv - 截断 CSV header 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70294581/