我有一个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
感谢您的帮助。
答案 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