그래서 내 입력은 다음과 같습니다.
1,somerandomwordsx,some.random.words,random.numbers.word,random
2,somerandoms,random,randomnumber,
1,randomwords,word1,word2,word3
21,randomwords,words.random,unique.word,more.random.words
111,randomword1,random.word2
출력은 다음과 같아야합니다.
1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3
awk, grep, sed로 많은 것을 시도했지만 쉼표를 무시하거나 "111"을 포함한 모든 "1" 일치 항목을 포함합니다. 첫 번째 열에 정확한 숫자 1이 있는 행만 저장해야 합니다. .
도와 주셔서 감사합니다!
답변1
사용 awk
:
$ awk -F , '$1 == 1' file
1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3
awk
각 행을 쉼표로 구분된 필드 집합으로 읽을 수 있습니다 . 위의 코드는 $1
첫 번째 필드( )가 있는 모든 줄을 인쇄합니다 1
.
사용 sed
:
$ sed '/^1,/!d' file
1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3
$ sed -n '/^1,/p' file
1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3
사용 grep
:
$ grep '^1,' file
1,somerandomwordsx,some.random.words,random.numbers.word,random
1,randomwords,word1,word2,word3
with sed
및 를 사용하면 " 줄 시작 부분에 문자가 있고 그 뒤에 쉼표가 옵니다"를 grep
의미하는 정규식을 사용할 수 있습니다 . 표현식을 줄의 시작 부분에 고정 하고 뒤에 쉼표를 일치시킴으로써 또는 등으로 시작하는 줄이 일치하는 것을 피할 수 있습니다 .^1,
1
^
1
11
12
첫 번째 sed
변형은 패턴과 일치하지 않는 모든 줄을 삭제하는 반면, 다른 변형은 패턴과 일치하는 줄만 인쇄합니다. 효과는 동일합니다.