2017-10-20 160 views
0

我面对的东西,看起来容易的当前行,但无法找到答案:删除文件

该功能的目的是去除所有包含3个逗号“”行:

while read line; do                          
     COUNT=$(echo $line | grep -o "\," | wc -) 
     if [ $COUNT -ne 3 ]; then 
       remove line 
     fi 
done < tmp.txt 

我没有找到如何删除当前行,你能帮助我吗?

我从grep中抽取这个tmp.txt,如果它是一个变量而不是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" 

在此先感谢

回答

0

我会在其他方式都做到了:

while read line; do                          
     COUNT=$(echo $line | grep -o "\," | wc -) 
     if [ $COUNT -eq 3 ]; then 
       echo $line >> $tempofile 
     fi 
done < tmp.txt 

如果线路匹配,保持它,否则到下一行。

3

使用sed命令唯一的解决方案。

sed '/^\([^,]*,\)\{3\}[^,]*$/d' infile 
  • 删除所有那些字符逗号,究竟发生了3次线。

或者使用awk

awk -F, 'NF!=4' infile 

或者两者皆是从变量读取。

sed '/^\([^,]*,\)\{3\}[^,]*$/d' <<<"$variable" 
awk -F, 'NF!=4' <<<"$variable" 
-1

这个简单的命令可以去除所有的线,它包含3

$ awk '!/3/' file_name

+1

不'3'本身性格逗号','并且只有在发生它的3倍线。 –

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