所以我有一个文件,其中包含由','分隔的一些文本行。我想创建一个脚本来计算一行的多少部分,如果该行包含16个部分,我想添加一个新部分。到目前为止它的工作很棒。唯一不起作用的是在末尾添加','。请参阅下面的示例:
原始文件:
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
b,b,b,b,b,b
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
b,b,b,b,b,b
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
预期结果:
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,xx
b,b,b,b,b,b
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
b,b,b,b,b,b
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,xx
这是我的代码:
while read p; do
if [[ $p == "HEA"* ]]
then
IFS=',' read -ra ADDR <<< "$p"
echo ${#ADDR[@]}
arrayCount=${#ADDR[@]}
if [ "${arrayCount}" -eq 16 ];
then
sed -i "/$p/ s/\$/,xx/g" $f
fi
fi
done <$f
结果:
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
,xx
b,b,b,b,b,b
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
b,b,b,b,b,b
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
,xx
我做错了什么?我确定它的东西很小但我找不到它..
答案 0 :(得分:3)
可以使用awk完成:
awk -F, 'NF==16{$0 = $0 FS "xx"} 1' file
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,xx
b,b,b,b,b,b
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a
b,b,b,b,b,b
a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,xx
-F,
将输入字段分隔符设置为逗号NF==16
是在{
和}
内执行阻止的条件,如果字段数为16 $0 = $0 FS "xx"
在行尾添加xx
1
是默认的awk操作,表示打印输出答案 1 :(得分:1)
使用sed的答案应该如下:
${line_number} s/..../..../
格式 - 定位特定行,您需要先找到行号。&
表示匹配的字符串sed语句应如下所示:
sed -i "${line_number}s/.*/&xx/"
我宁愿留给你玩它,但如果你愿意,我可以给你一个完整的工作样品。