Linux에서 열의 정보를 기반으로 파일을 분할하는 방법

Linux에서 열의 정보를 기반으로 파일을 분할하는 방법

두 번째 열의 값이 특정 값보다 작은 행을 분리하고 싶습니다.

입력 예:

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보다 작으면 스크립트 자체가 한 줄을 인쇄합니다.perlawk@FF[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의 값입니다.

관련 정보