Linuxで列の情報に基づいてファイルを分割する方法

Linuxで列の情報に基づいてファイルを分割する方法

2番目の列の値が特定の値より小さい行を分離したいと思います。

入力例:

id1 19501112
id2 19831207
id3 20001212
id6 20000101
id10 20061213
id11 20081212
id12 20100109
id13 20101218
id14 20101212
id15 20111111
id16 20150919
id20 20141415

2番目のフィールドの値が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 }

私たちの例では状況2 番目の列は 20100101 より小さいです。これ状況$2<20100101私たちが提供していないので、.siと書くのに十分合理的です。行動、awk は行を印刷する基本的な操作を行います。

答え2

パール方法:

perl -ane 'print if $F[1]<20100101' file

入力ファイルを1行ずつ読み、-n与えられたスクリプトを適用します-e。これは次のように-a動作します。自動的に各入力行をスペースに分割し、各フィールドを配列の要素として保存します。したがって、2番目のフィールド(配列は0から始まる)が20100101より小さい場合、スクリプト自体は1行を印刷します。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

変数です。ペアリング配列です。使用読み取りペア各行をゼロから始まるペア配列として読み取るので、要素1は各行の関心のある数字です。パラメータ2〜分ける分割に使用される値です。

あなたの場合、1の場合は何をしたいのかわかりませんが、ファイルの各行を読むときに${paired[0]}列1または列2を${paired[1]}希望のファイルに送信できるように上記の内容を変更できます。列 2 の値です。

関連情報