如何在输入中用逗号分隔符分别对信息进行分组?

时间:2013-12-28 11:07:24

标签: bash shell

我的文件名是当前目录下的myInfo.txt:DIR="$(pwd)";

里面有:

1000 at num 2049 28 2068100
1000 at num 2049 28 2623200
1000 at num 2049 28 2833000
1000 at num 2049 28 3499700
1000 at num 2051 28 2453500
1000 at num 2051 28 2969400
1000 at num 2051 28 3071300
1000 at num 2051 28 3838200

现在我按顺序使用了bash脚本:

DIR="$(pwd)";
array=(2049 2151);
for k in "${array[@]}"; do
  grep "at num ${k}" myInfo.txt | cut -d' ' -f 6 > ${DIR}/Info/nums/${k}.out
done

并将2068100 2623200......等每一行中的第6列信息分别归档到2049.out

文件夹下的文件2051.out${DIR}/Info/nums/

我的问题是:我可以使用如下的逗号分隔符来获得与以前相同的功能:

for k in "${array[@]}"; do
  grep "at num ${k}" myInfo.txt | cut -d',' -f 6 > ${DIR}/Info/nums/${k}.out
done

我尝试重新生成myInfo.txt以满足上述命令:

1000,at num 2049,28,2068100
1000,at num 2049,28,2623200
1000,at num 2049,28,2833000
1000,at num 2049,28,3499700
1000,at num 2051 28,2453500
1000,at num 2051 28,2969400
1000,at num 2051 28,3071300
1000,at num 2051 28,3838200

并尝试将信息分组与以前相同。但似乎cut -d',' -f 6无法获得与cut -d' ' -f 6相同的功能。

我想知道“cut -d”,' - f 6“是否有效?如果它有效,我应该在myInfo.txt文件中重新生成哪种格式的信息?谢谢。

2 个答案:

答案 0 :(得分:1)

您可以(至少)以两种方式解决问题:

您可以使用逗号替换myInfo.txt中的每个空格,而不仅仅使用逗号替换,或者您现在使用第4列(因为当使用,作为分隔符时,每列都用列)。

在任何情况下,你都应该修改你的文件,以便你的逗号分隔在所有行中都是一致的(现在你有时会有3个,有时候是2个逗号)。

答案 1 :(得分:1)

如果输入记录的结构如下:

1000,at num 2049,28,2068100

然后你需要

cut -d',' -f 4

提取第4列。

但是如果你想使用:

cut -d',' -f 6

然后输入记录应格式如下:

1000,at,num,2049,28,2068100