잘라내기 명령은 스크립트에서 탭으로 구분되지 않습니다.

잘라내기 명령은 스크립트에서 탭으로 구분되지 않습니다.

참고: 텍스트에 탭 문자를 삽입하는 방법을 몰라서 [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

관련 정보