提取逗号之间的数据

提取逗号之间的数据

我有一个输出文件,其中包含以逗号分隔的不同数字。问题是我不知道逗号的数量。

我反过来希望将此数据 grep 到另一个文件上。例如:

我有信息: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

或者,如果您不想使用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 同一个文件,你也可以尝试 shell 循环:

IFS=,
for i in $(cat csvfile)
do
  grep "$i" datafile
done > outfile

如果您不将其放入脚本或子 shell 中,则需要

oldIFS=$IFS

之前和

IFS=$oldIFS

然后..

相关内容