두 번째 열의 값이 특정 값보다 작은 행을 분리하고 싶습니다.
입력 예:
id1 19501112
id2 19831207
id3 20001212
id6 20000101
id10 20061213
id11 20081212
id12 20100109
id13 20101218
id14 20101212
id15 20111111
id16 20150919
id20 20141415
두 번째 필드의 값이 20100101보다 작은 행을 추출하고 싶습니다. 그래서 내 출력은 다음과 같습니다
id1 19501112
id2 19831207
id3 20001212
id6 20000101
id10 20061213
id11 20081212
어떤 제안이 있으십니까?
답변1
$ awk '$2<20100101' file
id1 19501112
id2 19831207
1d3 20001212
id6 20000101
id10 20061213
id11 20081212
일반적인 awk 프로그램은 다음 명령으로 구성됩니다.
condition { action }
우리의 예에서는상황두 번째 열이 20100101보다 작습니다. 이것상황$2<20100101
우리가 제공하지 않기 때문에 .si 라고 쓸 만큼 합리적입니다 .행동, awk는 행을 인쇄하는 기본 작업을 수행합니다.
답변2
펄 방법:
perl -ane 'print if $F[1]<20100101' file
입력 파일을 한 줄씩 읽고 -n
주어진 스크립트를 적용합니다 -e
. 이는 다음과 같이 -a
동작합니다 . 자동으로 각 입력 행을 공백으로 분할하고 각 필드를 배열의 요소로 저장합니다 . 따라서 두 번째 필드( 배열은 0에서 시작)가 20100101보다 작으면 스크립트 자체가 한 줄을 인쇄합니다.perl
awk
@F
F[1]
답변3
쉘 버전:
(while read l; do [ `echo $l | cut -d ' ' -f 2` -lt 20100101 ] && echo $l; done) < file
답변4
사례 2의 경우 Bash에서 수행할 수 있습니다. 예를 들어 아래 파일을 다음과 같이 저장합니다.나뉘다:
#!/usr/bin/env bash
# Usage: ./split 'data.txt' 'value'
paired=( )
value="$2"
while read -a paired
do
[[ ${paired[1]} < $value ]] &&
echo "${paired[@]}" >> lessthan.txt ||
echo "${paired[@]}" >> morethan.txt
done < "$1"
# end file
변수이니 참고하세요짝을 이루는배열입니다. 사용읽기 쌍각 행을 0부터 시작하는 쌍 배열로 읽으므로 요소 1은 각 행의 관심 숫자입니다. 매개변수 2 ~나뉘다분할에 사용되는 값입니다.
귀하의 경우 1의 경우 무엇을 원하는지 잘 모르겠지만 파일의 각 줄을 읽을 때 ${paired[0]}
열 1 또는 열 2를 ${paired[1]}
원하는 파일로 보낼 수 있도록 위의 내용을 수정할 수 있습니다. 열 2의 값입니다.