2014-06-17 4 views
0

여기에 hist.txt와 3 개의 열을 별개의 두 개의 파일 hist1.dat와 첫 번째와 두 번째 열 및 hist2.dat와 첫 번째와 세 번째 열로 구분하는 코드가 있습니다. hist.txt의 열은 둘 이상의 공백으로 구분 될 수 있습니다. 나는 histogram1.dat와 histogram2.dat에서 첫 번째 n 줄을 마지막 0이 아닌 값까지 저장하려고합니다.Awk와 head가 제대로 열을 식별하지 못합니다.

스크립트는 histogram1.dat correct를 작성하지만 histogram2.dat은 hist2.dat의 모든 행을 포함합니다. http://pastebin.com/JqgSKZrP

#!bin/bash 

sed 's/\t/ /g' hist.txt | awk '{print $1 " " $2;}' > hist1.dat 
sed 's/\t/ /g' hist.txt | awk '{print $1 " " $3;}' > hist2.dat 

head -n $(awk 'BEGIN {last=1}; {if($2!=0) last=NR};END {print last}' hist1.dat) hist1.dat > histogram1.dat 
head -n $(awk 'BEGIN {last=1}; {if($2!=0) last=NR};END {print last}' hist2.dat) hist2.dat > histogram2.dat 

이 문제의 원인은 무엇입니까 :

hist.txt은 같다? head의 경우 몇 가지 특별한 제한 사항이있을 수 있습니까?

감사합니다.

+1

FWIW, 첫 번째 나오지 | awk는'awk '{print $ 1, $ 2}'hist.txt'로 축소 될 수 있습니다. –

답변

0

첫 번째 막대 그래프를 들어,

awk '$2 ~ /000000/{exit}{print $1, $2}' hist.txt 

와 두 번째에 노력 : 내가 제대로 이해

awk '$3 ~ /000000/{exit}{print $1, $3}' hist.txt 

희망 ...

+0

결국 awk '{for (i = 1; i <= NF; i ++) {printf ("% d", $ i);}} {printf ("\ n");} 'hist.txt> $ dir/hist1.dat 그리고 나서 awk'BEGIN {last = 1}; {if ($ i! = 0) last = NR;}}; END {print last} '$ dir/hist1.dat에 대해 {for (i = 2; i = NF; 열의 수가 변경 될 수 있으므로이 솔루션을 사용했습니다. 히스토그램이 000000으로 시작하지 않으면 해결할 수 있습니다.하지만 첫 번째 부분을 참조해야하므로 꼬리 0을 자르기 만하면됩니다. – Arnold

+0

좋습니다. 다행히 해결했습니다! –