
참고: 텍스트에 탭 문자를 삽입하는 방법을 몰라서 [tab]으로 바꿨습니다.
표로 구분된 파일 이름 값 목록이 있습니다.
host1[tab]ip1
host2[tab]ip2
host3[tab]ip3
host4[tab]ip4
기본 구분 기호 cut
는 [tab]입니다.
cut -f1 < file
cut -f2 < file
예상대로 호스트와 IP를 얻었습니다. 하지만 내 스크립트에서는 작동하지 않습니다.
while read line
do
machine=$(echo $line | cut -f1)
ip=$(echo $line | cut -f2)
echo "$machine : is my hostname & $ip : is my @IP"
done < file
실제로 전체 줄을 $line
변수에 넣습니다. 나는 또한 더 큰 성공을 거두지 못한 채 노력했습니다.
machine=$(echo $line | cut -d$'\t' -f1)
ip=$(echo $line | cut -d$'\t' -f1)
그러나 테이블을 파일의 공백으로 바꾸고 코드를 수정하면 다음과 같습니다.
machine=$(echo $line | cut -d' ' -f1)
ip=$(echo $line | cut -d' ' -f1)
예상대로 작동합니다.
첫 번째 결과가 스크립트 외부의 CLI에서 작동하는데 왜 예상과 다른지 궁금합니다.
내 리눅스 버전:
Linux yolo 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
읽어주시고 도와주셔서 미리 감사드립니다.
답변1
cut
이 경우 호스트 이름과 주소를 삭제하고 직접 읽을 수 있습니다 .
#!/bin/sh
while read -r machine ip
do
printf '%s : is my hostname & %s : is my @IP\n' "$machine" "$ip"
done < file
exit 0