파일

2017-10-20 6 views
0
내가 쉽게 보이는 무언가에 직면하고있어

의 현재 행을 제거하지만, 대답은 찾을 수 없습니다 :파일

:이 기능의 목표는

3 개 쉼표 ','포함 된 모든 행을 제거하기를

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

현재 줄을 제거하는 방법을 찾지 못하셨습니까?

tmp.txt 대신 변수에있는 경우이 tmp.txt을 큰 숫자에서 grep으로 추출하면됩니까? 나는 다른 방법으로 그것을했을 사전

답변

0

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" 

감사 : 라인이 일치

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