カンマ間のデータ抽出

カンマ間のデータ抽出

カンマで区切られたさまざまな数字を含む出力ファイルがあります。問題は、カンマの数がわからないということです。

私はこのデータを別のファイルにインポートしたいと思います。たとえば、

私は次の情報を持っています:10,20,30,55,58,47,52,100

私は使う

awk '{split($0,a,","); for (i=1; i<=8; i++) print a[i]}' TMPFILE

データを抽出します。しかし、forループを実行するのにどれくらいの時間が必要かわかりません。

10のような数字を取得したら、grepdata.txtから取得し、次にdata.txtから20を取得するように最後の数字まで続行する必要があります。

ベストアンサー1

AKW:

echo '10,20,30,55,58,47,52,100' | \
awk '{x=split($0,a,","); for (i=1; i <= x; ++i) print a[i]}'

awk はフィールド区切り文字を使用します。

echo '10,20,30,55,58,47,52,100' | \
awk -F ',' '{for(i=1; i <= NF; ++i) print $i}'

sed:

 echo '10,20,30,55,58,47,52,100' | sed 's/,/\n/g'

その後、コマンドは次のようになります。

sed 's/,/\n/g' TMPFILE | xargs -I'{}' grep '{}' data.txt

またはxargs多分以下を使用して:

xargs -a TMPFILE -d, -I'\x' grep '\x\{1\}' data.txt

または、mightを使用したくない場合は、xargssedを使用してパターンファイルを作成します。

sed 's/\([^,]\+\),*/^\1$\n/g' TMPFILE | \
grep -o -f /proc/self/fd/0 data.txt

または、

tr ',' '\n' < TMPFILE | \
grep -f /proc/self/fd/0 data.txt

それはすべてあなたが何をgrepしたいのかによって異なります。

おすすめ記事