2010-01-06 7 views
2

프로그램의 필드를 구문 분석하여 표준 출력으로 인쇄하는 스크립트를 작성하려고합니다.백 슬래시 문자 제거하기

입력 파일 데이터 필드는 처음에 I가 AWK에 쓰기 시도 탭

의해 구분이

필드 1 FIELD2

같다.

cat test.txt | while read line; do entity=`awk -F "\t" '{print $2}'`;echo $entity; done 

명령 줄에서 정상적으로 작동합니다. 내가

while read line 
do 
     entity=`echo $line|awk -F \t '{print $2}'` 
     echo $entity 
done<"test.txt" 

이유는 에코 $ 라인 인 다음과 같이 쉘 프로그램에서 동일한 작업을 수행 할 때

는하지만 실제로 공간으로 탭을 인쇄합니다. 필드에는 실제로 공백이 포함될 수 있으므로 공백을 사용할 수 없습니다.

그런 다음 커팅을 사용하여 작성하려고했습니다.

while read line 
do 
     entity=`echo $line|cut -f5` 
     echo $entity 
done<"test.txt" 

다시 echo와 동일한 문제가 발생합니다.

비슷한 문제가있는 사람을 만나보십시오. 당신이 나에게 추천 할 수있는 해결책.

감사합니다. 발라

+0

쇼 실제 샘플 데이터를하고 싶은보십시오. 귀하의 출력을 설명하십시오 – ghostdog74

답변

2

는이

while read -r line 
do 
     entity=$(echo "$line"|cut -f5) 
     echo "$entity" 
done<"test.txt" 
+0

이것은 나를 위해 일했습니다. 감사합니다. – Boolean

4

당신이 탭이있는 변수가 다음 변수를 에코하려고 : 무슨 일이 일어나고 무엇

line=$'f1\tf2\tf3' 
echo ${line} 

는 쉘이 인수 구분자로 탭을 치료 및 에코 여러 인수를주고 있다는 점이다. 에코 자체에 탭이 표시되지 않음

탭을 유지하려면 줄을 단일 인수로 표시해야합니다. 그렇게 여전히 변수를 확장하기 위해, 당신은 큰 따옴표로 변수를 둘러싸해야합니다

echo "${line}" 

이 지금에 탭이 하나의 인자를 보내드립니다.

이이 같은 스크립트를 작성해야 의미 : 제한된 정보와

while read line; do 
    entity=$(echo "$line" | awk -F \t '{print $2}') 
    echo $entity 
done < test.txt 
+0

사실 나는 이것을 시도했으나 -r 옵션을 읽은 후에 만 ​​그것을 읽었습니다. 텍스트는 원본과 같아야합니다. – Boolean

관련 문제