홈>
다음과 같이 여러 줄이있는 파일을 처리하기 위해 2 개의 charachter delimeter로 cut to를 사용하고 싶습니다.
1F3C6..1F3CA
1F3CF..1F3D3
1F3E0..1F3F0
하지만 잘라내 기는 한 문자 만 허용합니다.
cut -d'..'
대신
나는
awk -F'..' "{echo $1}"
를 시도하고있다
하지만 작동하지 않습니다.
내 스크립트 :
wget -O output.txt http://www.unicode.org/Public/emoji/6.0/emoji-data.txt
sed -i '/^#/ d' output.txt # Remove comments
cat output.txt | cut -d' ' -f1 | while read line ;
do echo $line | awk -F'..' "{echo $1}"
done
-
답변 # 1
-
답변 # 2
awk
의 필드 구분 기호는 두 문자 이상인 경우 정규 표현식으로 처리됩니다. 와이즈 비즈 정규 표현식으로, 2자를 의미합니다. 그..
를 탈출해야합니다.
와 함께 또는[.]
.\.
(백 슬래시 자체도
awk -F'[.][.]' ... awk -F'\\.\\.' ...
에 대해 (최소 gawk와 같은 awk로) 이스케이프해야 함) /\n
확장\b
에 대한 주장 ).귀하의 경우 :
-F
어쨌든, 텍스트를 처리하기 위해 쉘 루프를 피하십시오.
awk -F' +|[.][.]' '/^[^#]/{print $1}' < output.txt
그read
, 그런 식으로 사용되지 않습니다 임의의 데이터에 사용해서는 안되며 변수를 인용해야합니다. -
답변 # 3
IFS를 사용하여 각 선을 분할하여 두 점 사이의 필드를 버릴 수 있습니다.
echo
실행 :
#/bin/sh while IFS=\. read a _ b do echo "field one=[$a] field two=[$b]" done < "file"
파일이 다음과 같다고 가정 :
$ ./script field one=1F3C6 field two=1F3CA field one=1F3CF field two=1F3D3 field one=1F3E0 field two=1F3F0
$ cat file 1F3C6..1F3CA 1F3CF..1F3D3 1F3E0..1F3F0
나에게 적합한 샘플 테스트 스크립트 :
그리고 출력은 :
수정
Stéphane Chazelas 의견을 읽고 Q&A를 링크 한 후 위의 내용을 다시 작성하여
loop
를 제거했습니다. .loop
를 제거하는 방법을 찾지 못했습니다 및부분을 변수로 유지 (예 :$f1
)$f2
그리고$f3
내 원래 답변에서) 전달 될 수 있습니다. 여전히 원래 질문에 무엇이 필요한지 알 수 없습니다.먼저
cut
를 사용합니다 :어떤 것을 출력 할 것인가 :
표시된
.
를 교체 할 수 있습니다--output-delimiter=STRING
를 사용하는 문자열 .다음으로
sed
cut
대신 출력을보다 세밀하게 제어하려면 :이것이 렌더링됩니다 :