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

时间:2015-01-12 16:00:17

标签: bash csv

我有一个CSV文件,我用自编的bash脚本解析。字段的内容让我们说第二列可能不包含超过50个字符。 如何找到这些字段并列出它们,包括它们的行号?我可以将它们修剪为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

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用:

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

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

答案 1 :(得分:1)

使用长度为50的printf

$ awk 'BEGIN{FS=OFS=";"} {$2=sprintf("%.50s", $2)}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", $1}'
asdfasdf
$ echo "asdfasdf" | awk '{printf "%.5s\n", $1}'
asdfa

答案 2 :(得分:0)

通过sed,

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