2013-05-23 2 views
1

사용 p.txt :정렬 사용 | csv에서 한 열에 awk?

$cat p.txt 
R 3 
R 4 
S 1 
S 2 
R 1 
T 1 
R 3 

다음 명령 종류 번째 열을 기준으로 : 번째 열에

$cat p.txt | sort -k2 
R 1 
S 1 
T 1 
S 2 
R 3 
R 3 
R 4 

다음 명령이 반복 제거합니다 값 : 지금

$cat p.txt | sort -k2 | awk '!x[$2]++' 
R 1 
S 2 
R 3 
R 4 

,691,363 다음 sapce에 대한 쉼표를 삽입, 우리는 다음과 같은 파일이
$cat p1.csv 
R,3 
R,4 
S,1 
S,2 
R,1 
T,1 
R,3 

다음 명령 (210)는 여전히 두 번째 열을 기준으로 정렬합니다

다음
$cat p1.csv | sort -t "," -k2 
R,1 
S,1 
T,1 
S,2 
R,3 
R,3 
R,4 

올바른 출력되지 않습니다 :

$cat p1.csv | sort -t "," -k2 | awk '!x[$2]++' 
R,1 

올바른 출력 :

R,1 
S,2 
R,3 
R,4 

어떤 제안이?

답변

4

는 마지막 명령 awk -F,을보십시오. 그래서 :

당신의 필드는 쉼표로 구분되어 있기 때문에
cat p1.csv | sort -t "," -k2 | awk -F, '!x[$2]++' 

, 당신은 필드 분리가 더 이상 공백이라고 AWK를 말할해야하지만 대신 쉼표. awake에 대한 옵션은 -F입니다.

+0

감사합니다. 나는 그 남자 awk – blehman

+0

그러나 고양이와 awk가이 문제에 필요하지 않은 것을 지적하는 것이 좋음을 사용하여 그 노트를 건너 뛰었습니다. – Kent

1

당신은 uniq -s 2가 건너 UNIQ을 알려줍니다 awk

cat p1.csv | sort -t "," -k2 | awk -F, '!x[$2]++' 
4

그럼 당신이 필요로하지 않는 모든 같은 것들, sortuniq는 것을

sort -t "," -k2 p1.csv | uniq -s 2 

을 할 충분히에 대한 필드 분리를 제공해야 처음 2 개 문자는

+0

정말 고마워요! 나는 두 번째 열에서 반복되는 값을 얻는 방법을 알아 내려고 노력해 왔습니다. 귀하의 게시물은 그것을 가능하게 만들었습니다 : cat p1.csv | sort -t ","-k2 | uniq -s2 -c – blehman

+0

@absu : 문자가 아닌 필드에 uniq를 사용하는 방법이 있습니까? 문자 길이가 첫 번째 열에서 다를 경우 uniq -s #의 #은 달라야합니다. 아마도'IFS' 될 필요가있을 것이다, 사실 – blehman

+0

, 난 UNIQ -f'이 제외 될 당신에게 필드의 수를 언급 할 수있는 유연성을 제공'볼,하지만 난 필드 구분자로','말할 수있는 옵션이 표시되지 않습니다 변경되었거나'sort -t ","-k2 p1.CSV | tr ',' ''| uniq -f 1 | tr '' '' '그러나'나는'''''''''이미'-u'가 있으므로 켄트가 지적한 것처럼 주목해야합니다. – abasu

4

잘은 alre을 한 (, 즉까지) ady가 정렬을 사용하면 awk이 전혀 필요하지 않습니다. 종류 또한 cat이 필요하지 -u

을 가지고 중 하나

sort -t, -k2 -u p1.csv 

는 출력을 예상 제공해야합니다.