我面对的事情看起来容易,却无法找到答案:
此功能的目标是删除包含3个逗号的所有行,',' :
while read line; do
COUNT=$(echo $line | grep -o "\," | wc -)
if [ $COUNT -ne 3 ]; then
remove line
fi
done < tmp.txt
我找不到如何删除当前行,你能帮帮我吗?
我从tmp.txt
的较大的grep
中提取此tmp.txt
,如果它在变量而不是while read line; do
COUNT=$(echo $line | grep -o "\," | wc -)
COUNT=$(echo $line | grep -o "\," | wc -)
if [ $COUNT -ne 3 ]; then
remove line
fi
done <<< "$toto"
中会是相同的吗?
.minttyrc
提前致谢
答案 0 :(得分:4)
仅使用sed
命令解决方案。
sed '/^\([^,]*,\)\{3\}[^,]*$/d' infile
,
正好发生3次的所有行。或使用awk
:
awk -F, 'NF!=4' infile
或两者都从变量中读取。
sed '/^\([^,]*,\)\{3\}[^,]*$/d' <<<"$variable"
awk -F, 'NF!=4' <<<"$variable"
答案 1 :(得分:2)
一个简单的 awk 解决方案
awk 'gsub(/,/,",")!=3' file
gsub
用指定的字符串替换模式,并返回替换/替换次数。
我们将,
替换为,
,因此gsub
将返回字符串中,
的数量。
示例:
输入文件
hello this line has 1 ,
This line, has, 3 ,
This line, has, 4 , commas , Thanks
<强>输出强>
$ awk 'gsub(/,/,",")!=3' file
hello this line has 1 ,
This line, has, 4 , commas , Thanks
答案 2 :(得分:0)
我会以另一种方式完成它:
while read line; do
COUNT=$(echo $line | grep -o "\," | wc -)
if [ $COUNT -eq 3 ]; then
echo $line >> $tempofile
fi
done < tmp.txt
如果该线匹配,请保留,否则转到下一行。
答案 3 :(得分:-1)
这个简单的命令可以删除包含3
的所有行 $ awk '!/3/' file_name