查找 CSV 中哪些字段超过 X 个字符

Find which fields in CSV are over X characters

我有一个 CSV 文件,我使用自己编写的 bash 脚本对其进行了解析。假设第二列中的字段内容不能包含超过 50 个字符。 我怎样才能找到这些字段并列出它们,包括它们的行号?我可以 trim 他们到 50 个字符吗?

例如:

100245;this field may not contain more than fifty characters;12;Y

应缩短为

100245;this field may not contain more than fifty charac;12;Y

感谢您的帮助。

通过sed,

$ sed 's/^\([^;]*;[^;]\{49\}\)[^;]*//' file
100245;this field may not contain more than fifty charac;12;Y

使用长度为 50 的 printf

$ awk 'BEGIN{FS=OFS=";"} {=sprintf("%.50s", )}1' file
100245;this field may not contain more than fifty charact;12;Y
100245;this field may not ters;12;Y

来自awk's guide - Modifiers for printf Formats

.prec

    %s

        Maximum number of characters from the string that should print. 

其他示例:

$ echo "asdfasdf" | awk '{printf "%.10s\n", }'
asdfasdf
$ echo "asdfasdf" | awk '{printf "%.5s\n", }'
asdfa

您可以使用:

awk -v len=50 'BEGIN{FS=OFS=";"} length()>len {=substr(, 1, len)} 1' file

这将找到所有大于参数 (50) 长度的字段,并且 trim 使用 substr 函数将这些字段减少到 50。