カンマで区切られたさまざまな数字を含む出力ファイルがあります。問題は、カンマの数がわからないということです。
私はこのデータを別のファイルにインポートしたいと思います。たとえば、
私は次の情報を持っています:10,20,30,55,58,47,52,100
私は使う
awk '{split($0,a,","); for (i=1; i<=8; i++) print a[i]}' TMPFILE
データを抽出します。しかし、for
ループを実行するのにどれくらいの時間が必要かわかりません。
10のような数字を取得したら、grep
data.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を使用したくない場合は、xargs
sedを使用してパターンファイルを作成します。
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したいのかによって異なります。
答え2
同じファイルを繰り返しgrepするには、シェルループを試すこともできます。
IFS=,
for i in $(cat csvfile)
do
grep "$i" datafile
done > outfile
スクリプトやサブシェルに入れない場合は、次のものが必要です。
oldIFS=$IFS
以前と
IFS=$oldIFS
それから..