查找 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。
我有一个 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。